0

文字列内の指定された場所を削除する必要があります

例えば:

入力: 4 花

出力: フローアー

私はこのコードを書きましたが、次のような出力が得られました: Flo (つまり、残りの単語を消去)

int main(){

    int num;
    int index = 1;
    string s;

    cin >> num >> s;
    s = s.erase(num-1);
    cout << index << " " << s << endl;

return 0;
}
4

4 に答える 4

8

試す:

s.erase(num-1, 1);

あなたは現在(事実上)電話しています:

s.erase(num-1, npos);

(そして、s =再割り当てする必要がないため、ビットを削除しますs)。

于 2013-03-27T07:27:04.643 に答える
1

あなたが C++ の世界の初心者である場合は、それを行う独自の関数を作成することをお勧めします! 必要なときにいつでも標準の関数とクラスを使用できます。なぜ車輪を再発明する必要があるのか​​ と言う人もいるかもしれませんが、それは再発明ではなく、発明の意味、車輪とは何か、どのように発明されたかを学ぶことです。

独自のコード (特に C 文字列用!) を作成すると、プログラミングの経験が豊富になり、構文に自信が持てるようになります。また、最も重要なこととして、ロジック開発のスキルが向上します。

あなたの機能は次のようになります:

void RemoveCharacter(char* pString, char cCharToRemove);

問題は、同じ文字をすべて削除するのか、それとも最初の文字だけを削除するのかということです。指定された文字が出現しない場合はどうなりますか? この関数は、キャラクターを削除した場合に何かを返す必要がありますか、それとも削除のカウンターを返しますか? 「remove-all-occurrences」かどうかを示す別のパラメーターを取る必要があります。

ハッピーコーディング!

于 2013-03-27T07:35:54.597 に答える
0

試してみてください s.erase(num-1, 1)、これがあなたが望むものです。

std::string::erase のプロトタイプは

erase(size_t __pos = 0, size_t __n = npos)

2 番目のパラメータが指定されていない場合は、デフォルト値nposが使用され、__pos から始まる残りが削除されます。

于 2013-03-27T07:55:39.233 に答える
0

これはどう?

std::string removeChar(std::string const& input, size_t pos) {
    return input.substr(0, pos-1) + input.substr(pos);
}

またはこれ

std::string removeChar(std::string const& input, size_t pos) {
    return input.erase(pos-1, 1);
}
于 2013-03-27T07:27:52.807 に答える