1

我不知道我的代码有什么问题:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string test;
    cin>>test;
    if (test[4] == ' ')
    {
        test[4] = '+';
    }
    cout<<test<<endl;
    system("PAUSE"); 
    return 0;
}

我基本上是在要求用户给我一个字符串(字符串将是“星际迷航”),然后,我希望将字符串替换为“+”。出于某种原因,我每次尝试都会得到这个。但是,当我运行它时,我会弹出一个对话框并显示“调试断言失败”和“表达式:字符串下标超出范围”。

4

3 回答 3

4

我通常会避免自己编写循环,而是尽可能使用算法:

std::getline(std::cin, test);

std::replace(test.begin(), test.end(), ' ', '+');
于 2012-08-28T03:11:32.143 回答
3

使用getline(cin,test)它不会跳过空格。另外,请使用 cin.get() 而不是System("Pause").

像这样的东西会更好。

for(int i = 0; i < test.length(); i++) {
    if(test[i] == ' ')
        test[i] = '+';
}
于 2012-08-28T02:24:13.443 回答
1

<<将读取一个字符串,在空格处停止,因此它会在第一个空格处切断您的示例字符串。在您的示例中,test将仅包含"star",而不包含"star trek"。因此索引4无效。

用于getline读取整个输入行。

您还应该检查输入长度:

getline(cin, test);

if (test.length() > 4)
    test[4] = '+';
于 2012-08-28T02:25:34.330 回答