替换字符串向量中的字母

时间:2015-03-03 13:28:13

标签: c++ string vector

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

  1. 我们在vector [i] position;
  2. 中有一个字符串
  3. 我们通过字符串直到找到它的结尾
  4. 同时我们检查字符串上的特定字母,然后将其替换为另一个
  5. 我们已完成该字符串并转移到下一个字符串....
  6. 到目前为止,我的代码正确地从标准输入读取了stings,但是对于我堆叠的其他过程。 (你看到的int告诉我们向量有多大)

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

1 个答案:

答案 0 :(得分:1)

我认为使用基于范围的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为矢量元素提供一些功能对象。