C++ 无法将字符串转换为字符数组

C++ 无法将字符串转换为字符数组,c++,C++,我试图将带空格的字符串转换为不带空格的字符数组 这是我试过的 string str; cout << "Enter a string: "; getline(cin, str); int TempNumOne=str.size(); char Filename[100]; for (int a=0;a<=TempNumOne;a++) { cout&l

我试图将带空格的字符串转换为不带空格的字符数组

这是我试过的

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;
只有
hello
被存储。为什么会发生这种情况?我该如何解决这一问题?

这是因为:

  if(str[a]!=' ')
          Filename[a]=str[a];
在“你好世界”中,
str[4]
o
str[6]
w
。上述代码将:将
o
存储到
Filename[4]
中,将
w
存储到
Filename[6]
中,而不是
Filename[5]
。计算机只做你让它做的事,现在做你想让它做的事。您的逻辑确实跳过了空格,但它所做的只是没有将其复制到
文件名
缓冲区的相应位置。这还不足以完成给定的任务

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

 if(str[a]!=' ')
      Filename[b++]=str[a];
不要忘记在结尾处使用null终止
文件名。

这是因为:

  if(str[a]!=' ')
          Filename[a]=str[a];
在“你好世界”中,
str[4]
o
str[6]
w
。上述代码将:将
o
存储到
Filename[4]
中,将
w
存储到
Filename[6]
中,而不是
Filename[5]
。计算机只做你让它做的事,现在做你想让它做的事。您的逻辑确实跳过了空格,但它所做的只是没有将其复制到
文件名
缓冲区的相应位置。这还不足以完成给定的任务

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

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

不要忘记在结尾处使用null终止
文件名

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


现在考虑你的算法-你开始复制数据直到第一个空间,你<强>跳过< /强>它的位置并继续使用第二个单词。通过跳过,您可以将

文件名
中与空格位置对应的位置保持在其原始状态,即未初始化。如果原始值为0,则它对应于字符串终止符(
\0
)。打印字符串时,遇到
\0
时解析停止,因此您看不到打印的其余数据。

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


现在考虑你的算法-你开始复制数据直到第一个空间,你<强>跳过< /强>它的位置并继续使用第二个单词。通过跳过,您可以将

文件名
中与空格位置对应的位置保持在其原始状态,即未初始化。如果原始值为0,则它对应于字符串终止符(
\0
)。打印字符串时,解析在遇到
\0
时停止,因此您看不到打印的其余数据。

为什么会出现奇怪的缩进?@πάνταῥεῖ: 那条带是怎么形成的?@LightnessRacesinOrbit Oops我忽略了这个要求。为什么会有奇怪的缩进?@πάνταῥεῖ: 这是如何剥离空间的?@LightnessRacesinOrbit Oops我忽略了这个要求。这是正确的,但它没有回答原始问题:)这是正确的,但它没有回答原始问题:)