为什么字符串声明'全局'与声明'本地'不同?

时间:2017-05-07 13:21:26

标签: c++ string

问题:给定一个长度为N且从0到N-1索引的字符串S,将其偶数索引和奇数索引字符作为空格分隔的字符串打印在一行上,即如果String是Hacker输出应为Hce akr。 我写了这段代码......

#include <iostream>
using namespace std;

int main() {
    int T;
    cin>>T;
    string str;
      string evenStr;
      string oddStr;
    for(int i=1; i<=T; i++)
    { 
      cin>>str;
      for(int j=0;j<str.size();j++)
        (j%2==0) ? (evenStr+=str[j]) : (oddStr+=str[j]);

      cout<<evenStr<<" "<<oddStr<<endl;
    }
    return 0;
}

输入T = 2和两个字符串“Hacker”“Rank”...此代码输出“Hce akr” “HceRn akrak” 但是这段代码打印出正确的结果......为什么?

#include <iostream>
using namespace std;

int main() {
    int T;
    cin>>T;

    for(int i=1; i<=T; i++)
    { string str;
      string evenStr;
      string oddStr;
      cin>>str;
      for(int j=0;j<str.size();j++)
        (j%2==0) ? (evenStr+=str[j]) : (oddStr+=str[j]);

      cout<<evenStr<<" "<<oddStr<<endl;
    }
    return 0;
}

输入T = 2和两个字符串“Hacker”“Rank”...正确输出:“Hce akr”“ Rn ak“

1 个答案:

答案 0 :(得分:0)

每次都需要清除字符串,否则你将在旧字符串中重复工作。

 //locally declared
for (...)
{
  string evenstr;
  //work
}

其他明智的

// out of loop declared.
for (...)
{
  evenstr="";
    //work
}