[文字列] Ybt_単語置換

一般的なアイデア

これが英語の段落で、改行で終わります。
もう2つ単語をあげましょう。英語のその段落のすべての単語を以下の単語に置き換えてください。
大文字と小文字を区別


解決

単純な文字列関数の使用。ここでは、s.erase()、s.find()、およびs.insert()を使用します。3つの関数
(それぞれクリア、検索、挿入)
は入力に注意を払います...
YbtOjで測定された90ポイント。入力にバグがあるようです(?)
バグコード

bug代码1getline(cin, s);
    cin >> s1 >> s2;
    s = " " + s + " ";
bug代码2:
    c = getchar();
    while (c != '\n') {
    
    
        s = s + c;
        c = getchar();
    }
    s = " " + s + " ";
    cin >> s1 >> s2;

[混乱]。とにかく、以下に変更してください。


コード

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
string s, s1, s2;
char c;
int main() {
    
    
    c = getchar();
    while ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == ' ') {
    
    
        s = s + c;
        c = getchar();
    }
    s = " " + s + " ";  
    //前后加空格,便于分辨文段中所找到的字串是否是一个单词,而不是单词的一部分
    cin >> s1 >> s2;
    s1 = " " + s1 + " ";
    s2 = " " + s2 + " ";
    while (s.find(s1, 0) != string::npos) {
    
      //能找到
        int k = s.find(s1, 0);  //替换
        s.erase(k, s1.size());
        s.insert(k, s2);
    }
    cout << s.substr(1, s.size() - 1) << endl;  //去空格输出
}

おすすめ

転載: blog.csdn.net/qq_42937087/article/details/114991573
おすすめ