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我忽略了这个要求。这是正确的,但它没有回答原始问题:)这是正确的,但它没有回答原始问题:)