与getline C++的奇怪行为

Strange behavior with getline C++

本文关键字:getline C++      更新时间:2023-10-16

我正在编写一个简单的程序,其中所有的"空格"都将替换为"%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;
}

我得到以下奇怪的行为:

  1. 使用测试输入"this is strange "我得到"this%20is%20strange%20%20his is",我只是期望"this%20is%20strange%20%20"

  2. 如果我对相同的字符串进行硬编码,我会得到正确的结果。

  3. char *cstr1 = new char[size];替换为char cstr1[size];并删除delete[],同时仍然通过getline获取输入也可以消除错误。

我正在使用 i686-苹果达尔文10-g++-4.2.1:

任何帮助都非常感谢。

最后一行必须是 *cstr = '\0';而不是 ==

代码末尾的*cstr == '';更改为*cstr = '';
维奥拉!

 *cstr == '';

此行检查*cstr是否等于 '',并相应地返回10

这是错误的,因为您想在字符串末尾插入字符所以写单=而不是双=