Я пишу простую программу, где все «пробелы» будут заменены на «% 20».Странное поведение с getline C++
#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 == '\0';
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-яблочный darwin10-г ++ - 4.2.1:
Любая помощь очень ценится.
Вы попытались выполнить код в отладчике, чтобы увидеть, что происходит во втором цикле? –