与getline C++的奇怪行为
Strange behavior with getline C++
我正在编写一个简单的程序,其中所有的"空格"都将替换为"%20"。
#include <iostream>
#include <string>
using namespace std;
int main (int argc, char* argv[]){
string input;
cout << "please enter the string where spaces will be replaced by '%20'" << endl;
getline(cin, input);
//count the number of spaces
int countSpaces = 0;
for (int i = 0 ; i < input.length() ; i++){
if (input[i] == ' '){
countSpaces++;
}
}
int size = input.length() + (2 * countSpaces) + 1;
//char cstr1[size];
char *cstr1 = new char[size];
char *cstr = cstr1;
for (int i = 0 ; i < input.length() ; i++){
if(input[i] == ' '){
*cstr++ = '%';
*cstr++ = '2';
*cstr++ = '0';
}
else{
*cstr++ = input[i];
}
}
*cstr == ' ';
cout << cstr1 << endl;
delete[] cstr1;
return 0;
}
我得到以下奇怪的行为:
使用测试输入
"this is strange "
我得到"this%20is%20strange%20%20his is"
,我只是期望"this%20is%20strange%20%20"
如果我对相同的字符串进行硬编码,我会得到正确的结果。
将
char *cstr1 = new char[size];
替换为char cstr1[size];
并删除delete[]
,同时仍然通过getline
获取输入也可以消除错误。
我正在使用 i686-苹果达尔文10-g++-4.2.1:
任何帮助都非常感谢。
最后一行必须是 *cstr = '\0';而不是 ==
将
代码末尾的*cstr == ' ';
更改为*cstr = ' ';
维奥拉!
*cstr == ' ';
此行检查*cstr
是否等于 ' '
,并相应地返回1
或0
这是错误的,因为您想在字符串末尾插入