1

基本上我想发现一种情况:用户输入一个字符串让我们说“sarah”,如果有人想对名字 sarah 中的每个字符进行操作,它现在存储在字符串数据类型中,怎么做?就像首先从字符串中获取 s 然后是 a 然后 r 等等。任何内置功能或更好的策略?谢谢。

4

3 回答 3

4

一种使用 : 和 lambda 函数的简单方法std::for_each(C++11)

std::string str="sarah";
std::for_each( str.begin(), str.end(),
               [](char &x){

                  //Play with x
               } 
               );

否则,只需使用 for 循环

for(size_t i=0;i<str.size();++i)
   {
    //Play with str[i];
   }

或使用 C++11:-

   for(char& x : str) {
     //Play with x;
   }
于 2013-10-24T18:34:35.097 回答
1

这是另一个:

std::transform(begin(str), end(str), begin(str), do_things);

哪里do_things是字符操作。我更喜欢transform这样做,for_each因为对我来说,它更好地表达了正在发生的转变。但是,如果do_things改为引用字符,那么for_each(或循环)可能是更好的选择。

这是一个更充实的例子:

#include <iostream>
#include <string>
#include <algorithm> // for std::transform
#include <cctype> // for toupper/tolower

// Needed because toupper/tolower take and return ints, not chars.
char upper(char c) { return std::toupper(c); }
char lower(char c) { return std::tolower(c); }

int main() {
    using namespace std;
    string name;
    cout << "Enter your name: ";
    cin >> name;

    // Make the name uppercase.
    transform(name.begin(), name.end(), name.begin(), upper);
    cout << "HI " << name << endl;

    // Make the name lowercase.
    transform(name.begin(), name.end(), name.begin(), lower);
    cout << "hi " << name << endl;
}
于 2013-10-24T18:39:33.930 回答
1

你可以使用这个:

  1. 使用基于范围的 for 循环遍历a 的字符std::string(它来自 C++11,在最近的 GCC、clang 和 VC11 beta 版本中已经支持):

    std::string str = "sarah";
    for(char& c : str) {
        do_things_with(c);
    }
    
  2. std::string用迭代器循环 a 的字符:

    std::string str = "sarah";
    for(std::string::iterator it = str.begin(); it != str.end(); ++it) {
        do_things_with(*it);
    }
    
  3. std::string用老式的 for循环遍历 a 的字符:

    for(std::string::size_type i = 0; i < str.size(); ++i) {
        do_things_with(str[i]);
    }
    
  4. 循环遍历以 null 结尾的字符数组的字符:

    char* str = "sarah";
    for(char* it = str; *it; ++it) {
        do_things_with(*it);
    }
    

请参阅:对于字符串中的每个字符

于 2013-10-24T18:35:08.533 回答