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;
}

私は基本的にユーザーに文字列を提供するように求めています(文字列は「スタートレック」になります)。次に、文字列を「+」に置き換えます。どういうわけか、試してみるたびにこれが表示されます。ただし、これを実行すると、「Debug AssertionFailed」および「Expression:String subscriptoutofrange」というダイアログボックスが表示されます。

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 に答える