如何在c++中对字符串中的每个字符进行for循环?
const char* str = "abcde"; int len = strlen(str); for (int i = 0; i < len; i++) { char chr = str[i]; //do something.... }
for循环可以这样实现:
string str("HELLO"); for (int i = 0; i < str.size(); i++){ cout << str[i]; }
这将逐字符打印字符串。str[i]返回索引i处的字符。
str[i]
i
如果是字符数组:
char str[6] = "hello"; for (int i = 0; str[i] != '\0'; i++){ cout << str[i]; }
在现代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)。
std::string::const_iterator
for (char const & c : s)
for (char c : s)
对于C-string (char []),你应该这样做:
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
str.size()
std::string mystring = "My String"; std::string::iterator it; for(it = mystring.begin(); it != mystring.end(); it++) { char c = *it; }
std::string str = ???; for(char& c : str) { do_things_with(c); }
Looping through the characters of a std::string with iterators:
std::string str = ???; for(std::string::iterator it = str.begin(); it != str.end(); ++it) { do_things_with(*it); }
Looping through the characters of a std::string with an old-fashioned for-loop:
std::string str = ???; for(std::string::size_type i = 0; i < str.size(); ++i) { do_things_with(str[i]); }
Looping through the characters of a null-terminated character array:
char* str = ???; for(char* it = str; *it; ++it) { do_things_with(*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基本上是一个字符数组,因此您可以指定索引来获取字符。如果您不知道索引,那么您可以像上面的代码一样对其进行循环,但是当您进行比较时,请确保使用单引号(它指定一个字符)。
除此之外,上面的代码是自解释的。
你可以通过使用字符串库中的at函数来获取字符串中的每一个char,就像我这样做的
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(index)访问字符
stringname.at(index)
这是另一种方法,使用标准算法。
#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; }); }
我没有看到任何使用“c字符串”的基于范围的for循环的例子。
char cs[] = "This is a c string\u0031 \x32 3"; // range based for loop does not print '\n' for (char& c : cs) { printf("%c", c); }
不是相关的,而是int数组的例子
int ia[] = {1,2,3,4,5,6}; for (int& i : ia) { printf("%d", i); }
可以使用size()方法获取字符串的长度,使用方括号操作符访问每个字符。
#include<bits/stdc++.h> using namespace std; int main() { string s; cin >> s; int length = s.size(); for(int i = 0; i < length; i++) { process(s[i]); } }