对于字符串中的每个字符

如何在c++中对字符串中的每个字符进行for循环?

542223 次浏览
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处的字符。

如果是字符数组:

char str[6] = "hello";
for (int i = 0; str[i] != '\0'; i++){
cout << str[i];
}
基本上以上两个是c++支持的两种类型的字符串。 第二个称为c字符串,第一个称为std字符串或(c++字符串)。我建议使用c++字符串,很容易处理

在现代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)

对于C-string (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;
}
  1. 通过std::string字符循环,使用基于范围的for循环(它来自c++ 11,在GCC、clang和VC11 beta的最新版本中已经得到支持):

    std::string str = ???;
    for(char& c : str) {
    do_things_with(c);
    }
    
  2. 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);
    }
    
  3. 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]);
    }
    
  4. 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)访问字符

这是另一种方法,使用标准算法。

#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]);
}
}