Для каждого символа в строке

Как бы я сделал цикл for для каждого символа в строке на С++?

Ответ 1

  • Цитирование символов в std::string, используя цикл на основе диапазона (он из С++ 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);
    }
    
  • Цитирование по символам a std::string с помощью старомодного цикла for:

    for(std::string::size_type i = 0; i < str.size(); ++i) {
        do_things_with(str[i]);
    }
    
  • Цитирование через символы символьного массива с нулевым символом:

    char* str = ???;
    for(char* it = str; *it; ++it) {
        do_things_with(*it);
    }
    

Ответ 2

В современном С++:

std::string s("Hello world");

for (char & c : s)
{
    std::cout << "One character: " << c << "\n";
    c = '*';
}

В С++ 98/03:

for (std::string::iterator it = s.begin(), end = s.end(); it != end; ++it)
{
    std::cout << "One character: " << *it << "\n";
    *it = '*';
}

Для итерации только для чтения вы можете использовать std::string::const_iterator в С++ 98 и for (char const & c : s) или просто for (char c : s) в С++ 11.

Ответ 3

Цикл 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-строкой, а первая называется std string или (С++ string). Я бы предложил использовать строку С++, очень удобную для обработки.

Ответ 4

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

Ответ 5

Вот еще один способ сделать это, используя стандартный алгоритм.

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

Ответ 6

Я не вижу никаких примеров, используя диапазон, основанный на цикле со строкой "c".

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

Ответ 7

Для C-строки (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;
}

Ответ 8

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
        }
        //...........
    }

Строка - это в основном массив символов, поэтому вы можете указать индекс для получения символа. Если вы не знаете индекс, то вы можете пропустить его, как приведенный выше код, но когда вы делаете сравнение, убедитесь, что вы используете одинарные кавычки (который указывает символ).

Кроме этого, приведенный выше код является самоочевидным.

Ответ 9

вы можете получить каждый char в строке, используя функцию 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)