2017-10-13 41 views
-10

目前正在執行Hackerrank.com的30天代碼並選擇使用C++來完成。圍繞黑客排列30天代碼的問題,第6天[C++]

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

上面的圖片是個問題,以及我的解決方案,並且儘管其輸出匹配說,這是不正確的輸出。我是C++新手,想了解如何改進代碼。我意識到有很多不同的重寫方法,但只是想要對我提出的問題進行批評,或者如果問題過於複雜或適合解決問題的方案。感謝

對於那些不能看到圖像,這是一個問題:
TASK
給定一個字符串,S,的被索引爲0到N-1的長度N,打印其偶數索引和奇數將索引字符作爲空格分隔的字符串放在一行中。 輸入是測試用例的數量(t),後面跟着't'個字符串。
INPUT
黑客
排名
輸出
HCE AKR
RNK 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; 
} 
+6

'新的char [0]'似乎不是很合適。 – alain

+2

調試,調試,調試... – Jepessen

+0

如果您試圖提出難以理解的問題,那麼您已經成功了。 – Steve

回答

1

如果你開始使用std::string使用它,而不是動態分配字符數組(你反正做錯了,大小不應該是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 << ' '; 
}