对于字符串中的每个字符

时间:2012-02-24 21:19:30

标签: c++ loops for-loop character

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

10 个答案:

答案 0 :(得分:358)

  1. 使用基于范围的for循环(来自C ++ 11,在最近发布的GCC,clang和VC11中已经支持)循环遍历std::string的{​​{3}}测试版):

    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的字符:

    std::string str = ???;
    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);
    }
    

答案 1 :(得分:27)

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 string,第一个叫做std string或(c ++ string)。我建议使用c ++ string,很容易处理。

答案 2 :(得分:24)

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

答案 3 :(得分:9)

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

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

答案 4 :(得分:7)

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

答案 5 :(得分:3)

我没有看到任何使用带有“c string”的基于范围的循环的示例。

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

答案 6 :(得分:1)

对于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;
}

答案 7 :(得分:1)

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

除此之外,上述代码是不言自明的。

答案 8 :(得分:0)

您可以使用 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]);
   }
}

答案 9 :(得分:-2)

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

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)

访问字符