替换字符串向量中的字母

Replace letters in vectors of string

我有一个字符串向量,我尝试执行以下过程:

  1. 我们在 vector[i] 位置有一个字符串;
  2. 我们遍历字符串直到找到它的结尾
  3. 同时我们检查字符串中的特定字母并将其替换为另一个
  4. 我们完成了那个字符串并转到下一个....

到目前为止,我的代码可以正确地从标准输入中读取字符串,但对于我堆叠的其他程序。 (你看到的 int T 告诉我们向量有多大)

我是C++的新手所以请理解的答案! :)

#include <iostream>
#include <vector>
#include <string>
#include <iterator>

using namespace std;

int main() {

    unsigned short T = 0;

    cin >> T;
    T++;

    vector<string> phrases(T);

    for (int i = 0; i < T; ++i) {
        getline(cin,phrases[i]);
        cout << phrases[i];
    }

    vector<string>::iterator letter;

    for (int i = 0; i < T; ++i) {
        letter = phrases[i].begin();
        while (letter != NULL) { //while iterator isn't in the end of the phrases[i]

            switch ( letter ) { // we want to replace the letter of the string
                case 'a' : letter = 'b'   //if the letter of the string is a then replace it with b

                //etc 
           }


           letter++; // increase the iterator

        }

    }

    phrases.clear();
    return 0;
}

我认为使用基于范围的for语句会更简单。例如

for ( std::string &s : phrases ) 
{
    for ( char &c : s )
    {
        switch ( c ) 
        {
            case 'a' : 
                c = 'b';
                break;

            //etc 
       }
    }
}

考虑到好像声明

T++;

没有意义。

如果您的编译器不支持 C++ 2011,那么您可以按以下方式重写这些循环

for ( std::vector<std::string>::size_type i = 0; i < phrases.size(); i++ ) 
{
    for ( std::string::size_type j = 0; j < phrases[i].size(); j++ )
    {
        switch ( phrases[i][j] ) 
        {
            case 'a' : 
                phrases[i][j] = 'b';
                break;

            //etc 
       }
    }
}

或者您可以使用标准算法 std::for_each 为向量的元素提供一些功能对象。