对于string中的每个字符
我怎么会在C ++中的string中的每个字符做循环?
-
循环访问
std::string
,使用基于范围的for循环(它来自C ++ 11,在最近的GCC,clang和VC11 beta版本中已经支持):std::string str = ???; for(char& c : str) { do_things_with(c); }
-
使用迭代器循环访问
std::string
的字符:std::string str = ???; for(std::string::iterator it = str.begin(); it != str.end(); ++it) { do_things_with(*it); }
-
用老式的for循环遍历
std::string
的字符:for(std::string::size_type i = 0; i < str.size(); ++i) { do_things_with(str[i]); }
-
循环遍历以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(索引)访问字符