如何迭代字符串中的每个字符?

问题描述 投票:0回答:6

我有一个字符串,我需要抓取每个字符并进行一些检查:

std::string key = "test"
int i = 0;
while (key.at(i))
{
    // do some checking
    i++;
}

这里的问题是,最终索引

i
将超出范围,因此系统将崩溃。我该如何解决这个问题?

c++ string char
6个回答
1
投票
std::string key = "test"
for(int i = 0; i < key.length(); i++)
{
    //do some checking
}

1
投票
for(auto i = key.cbegin(); i != key.cend(); ++i)
{
    // do some checking
    // call *i to get a char
}

1
投票

你可以像这样使用for循环。

#include <string>

std::string str("hello");

        for(auto &c : str) {
            std::cout << c << std::endl;
        }

0
投票

另一种解决方案是使用

std::for_each()
并提供一个 lambda 函数来处理每个字符,如下所示:

std::string key = "testing 123";
std::for_each(key.cbegin(), key.cend(), [](char c){ std::cout << c; });

打印:

testing 123

0
投票

你可以这样做,考虑一个

string
变量。只是迭代字符:

cout << "Insert a phrase, please: ";
getline(cin, input);

for (char c: input) {
    cout << "Character: " << c << endl;
}

不是主题,但值得一提...

就用户输入而言,

cin >> variable
getline(cin, variable)
之间存在差异:

  • cin
    如果遇到空格则停止读取字符
  • getline(cin, variable)
    从输入中读取,直到遇到 EOL 字符

欲了解更多信息

getline()


您可能对完整的示例感兴趣以供进一步参考...

#include <iostream>

using namespace std;


string userInputCin() {
    string input;

    cout << "Insert a phrase, please: ";
    cin >> input;

    for (char c: input) {
        cout << "Character: " << c << endl;
    }

    return input;
}

string userInputCinGetline() {
    string input;

    cout << "Insert a phrase, please: ";
    getline(cin, input);

    for (char c: input) {
        cout << "Character: " << c << endl;
    }

    return input;
}

int main()
{
    int option;
    cout << "[Processing String Input]" << endl;
    cout << "\n1. with cin" << endl;
    cout << "2. with cin + getline" << "\n\n> ";
    cin >> option;
    switch (option) {
        case 1:
            userInputCin();
            break;
        case 2:
            cin.ignore(); // make sure to call this, if calling getline() after
            userInputCinGetline();
            break;
    }
    return 0;
}


0
投票

迭代 std::string 的字符的最简单方法如下:

std::string key = "test"

for (char &ch : key) {
    printf("%c\n", ch);
}
© www.soinside.com 2019 - 2024. All rights reserved.