对于string中的每个字符

我怎么会在C ++中的string中的每个字符做循环?

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

     std::string str = ???; for(char& c : str) { do_things_with(c); } 
  2. 使用迭代器循环访问std::string的字符:

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

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

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

在现代C ++中:

 std::string s("Hello world"); for (char & c : s) { std::cout << "One character: " << c << "\n"; c = '*'; } 

在C ++ 98/03中:

 for (std::string::iterator it = s.begin(), end = s.end(); it != end; ++it) { std::cout << "One character: " << *it << "\n"; *it = '*'; } 

对于只读迭代,您可以在C ++ 98中使用std::string::const_iterator在C ++ 11中for (char const & c : s)或者只for (char c : s)

for循环可以这样实现:

 string str("HELLO"); for (int i = 0; i < str.size(); i++){ cout << str[i]; } 

这将按字符打印string。 str[i]在索引i处返回字符。

如果它是一个字符数组:

 char str[6] = "hello"; for (int i = 0; str[i] != '\0'; i++){ cout << str[i]; } 

基本上上面两个是c ++支持的两种types的string。 第二个叫cstring,第一个叫std string或(c ++ string)。我build议用c ++的string,很容易处理。

 const char* str = "abcde"; int len = strlen(str); for (int i = 0; i < len; i++) { char chr = str[i]; //do something.... } 

这是另一种使用标准algorithm的方法。

 #include <iostream> #include <string> #include <algorithm> int main() { std::string name = "some string"; std::for_each(name.begin(), name.end(), [] (char c) { std::cout << c; }); } 

对于Cstring( char [] ),你应该这样做:

 char mystring[] = "My String"; int size = strlen(mystring); int i; for(i = 0; i < size; i++) { char c = mystring[i]; } 

对于std::string你可以使用str.size()来获得它的大小并像例子那样进行迭代,或者可以使用迭代器:

 std::string mystring = "My String"; std::string::iterator it; for(it = mystring.begin(); it != mystring.end(); it++) { char c = *it; } 
 for (int x = 0; x < yourString.size();x++){ if (yourString[x] == 'a'){ //Do Something } if (yourString[x] == 'b'){ //Do Something } if (yourString[x] == 'c'){ //Do Something } //........... } 

string基本上是一个字符数组,因此您可以指定索引来获取字符。 如果你不知道索引,那么你可以像上面的代码一样遍历它,但是当你进行比较时,确保使用单引号(它指定了一个字符)。

除此之外,上面的代码是自我解释的。

你可以通过使用string库的at函数来获取string中的每个字符,就像我这样做的

 string words; for (unsigned int i = 0; i < words.length(); i++) { if (words.at(i) == ' ') { spacecounter++; // to count all the spaces in a string if (words.at(i + 1) == ' ') { i += 1; } 

这只是我的代码的一部分,但重点是你可以通过stringname.at(索引)访问字符