【问题标题】:Questions surrounding hacker rank 30 days of code, Day 6 [C++]黑客问题排名 30 天代码,第 6 天 [C++]
【发布时间】:2017-10-13 15:04:19
【问题描述】:

目前在做Hackerrank.com的30天代码,选择用C++做。

![第 6 天]https://imgur.com/a/euGFr

上面的图像是问题以及我的解决方案和输出,尽管与他们的输出匹配,但它表明它是不正确的。我是 C++ 新手,想要一些关于如何改进代码的提示。我意识到有许多不同的方式来重写它,但只是想对我的想法提出批评,以及它是否过于复杂或给定问题的合适解决方案。谢谢

对于那些看不到图像的人来说,这是一个问题:
任务
给定一个长度为 N 且索引为 0 到 N-1 的字符串 S,将其偶数索引字符和奇数索引字符作为空格分隔的字符串打印在一行上。 输入是测试用例的数量(t),后跟“t”个字符串。
输入
2
黑客
排名
输出
Hce akr
Rn ak

我的代码

#include <iostream>
using namespace std;


int main() {
    int testCases;
    cin >> testCases;
    for(int i=0;i<testCases;i++)
    {
        char* evenArr = new char[0];
        char* oddArr = new char[0];
        string test;
        cin >> test;
        for(int j=0;j<test.length();j++)
        {
            if(j%2==0)
            {
                evenArr[j]=test[j];
                cout<<evenArr[j];
            }
            else
                oddArr[j]=test[j];
        }
        cout<<" ";
        for(int k = 0;k<sizeof(oddArr);k++)
        {
            cout << oddArr[k];
        }
        cout<<endl;
        delete[] evenArr;
        delete[] oddArr;
    }
    return 0;
}

【问题讨论】:

  • new char[0] 好像不太合适。
  • 调试,调试,调试...
  • 如果您试图使问题尽可能难以理解,那么您就成功了。
  • @RiberoD07 这个输出 rnk ak 是错误的。应该有 rn ak
  • 邮政编码和文字,而不是屏幕快照。防火墙阻止我查看您的快照。

标签: c++ arrays


【解决方案1】:

如果您开始使用std::string,请使用它而不是动态分配的 char 数组(无论如何您都做错了,大小不应为 0):

std::string split[2];
for( size_t i = 0; i < test.length(); ++i )
    split[i%2] += test[i];

另一种解决方案是传递test 字符串两次并打印没有临时字符串的偶数和奇数符号:

for( size_t start : { 0, 1 } ) {
    for( size_t i = start; i < test.length(); i += 2 )
        std::cout << test[i];
    if( start == 0 ) 
        std::cout << ' ';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多