无法将字符串转换为char数组

时间:2016-10-08 20:19:05

标签: c++

我正在尝试将带空格的字符串转换为不带空格的char数组。

这是我试过的

string str;
    cout << "Enter a string: ";
    getline(cin, str);
    int TempNumOne=str.size();
        char Filename[100];
        for (int a=0;a<=TempNumOne;a++)
                {
                    cout<<str[a]<<endl;
                    if(str[a]!=' ')
                        Filename[a]=str[a];
                }

        cout<<Filename;

输出看起来像这样

Enter a string: hello world
h
e
l
l
o

w
o
r
l
d

hello

仅存储hello。为什么会发生这种情况?如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

这是因为:

  if(str[a]!=' ')
          Filename[a]=str[a];

在“hello world”中,str[4]ostr[6]w。上面的代码将:o存储到Filename[4],将w存储到Filename[6],而不是Filename[5]。计算机只执行您要求它执行的操作,现在您希望它执行的操作。你的逻辑确实跳过了空间,但它所做的就是它没有将它复制到Filename缓冲区的相应位置。这还不足以完成给定的任务。

要正确执行此操作,您需要维护一个单独的索引变量,将其称为b,例如,将其初始化为0,然后:

 if(str[a]!=' ')
      Filename[b++]=str[a];

并且不要忘记在结尾处空终止Filename

答案 1 :(得分:1)

您的Filename数组未初始化。这意味着它最初可能包含任何值,包括零(可能发生的情况)。

现在考虑一下您的算法 - 您开始将数据复制到第一个空格,然后跳过其位置并继续第二个单词。通过跳过,您将Filename中与空间位置对应的位置保持其原始状态,即未初始化。如果原始值为0,则它​​对应于字符串终止符(\0)。当您打印字符串时,解析会在遇到\0时停止,因此您不会看到打印的其余数据。