我正在尝试将带空格的字符串转换为不带空格的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
。为什么会发生这种情况?如何解决这个问题?
答案 0 :(得分:4)
这是因为:
if(str[a]!=' ')
Filename[a]=str[a];
在“hello world”中,str[4]
为o
,str[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
时停止,因此您不会看到打印的其余数据。