Задача

9 /14


(C++) Перебор всех символов

Теория Нажмите, чтобы прочитать/скрыть


Перебор всех символов

Для перебора символов в строке в C++, можно использовать цикл for или while в сочетании с индексацией строки.

Примеры итерации по строке

1)  Цикл for для итерации через индексы символов строки

#include <iostream>
#include <string>

using namespace std;

int main() 
{
    string str = "Hello, World!";
    
    for (size_t i = 0; i < str.length(); i++) 
    {
        cout << str[i] << " ";
    }
    
    return 0;
}

В этом примере:

  1. Мы создаем строку str, которую хотим перебирать.
  2. Используя цикл for и переменную i, проходим по каждому индексу символа от 0 до str.length() - 1.
  3. Внутри цикла выводим символ на экран с помощью cout.
  4. Обратите внимание, что мы используем str.length() для получения длины строки.
  5. В результате каждый символ строки будет выведен на экран через пробел.
  6. Тип данных size_t используется для представления размеров объектов в памяти. Он является беззнаковым целочисленным типом. Этот тип обеспечивает переносимость кода между различными компиляторами и платформами, так как размеры объектов могут различаться в зависимости от архитектуры и операционной системы.
    Так как size_t беззнаковый тип, то запись цикла для итерации с конца строки в виде:
    for (size_t i = str.length() - 1; i >= 0; i--) 
    
    приведет к ошибке. Так как size_t является беззнаковым целочисленным типом, и значение переменной этого типа всегда будет больше или равно нулю. В результате выражение i >= 0 всегда истинно, что приведет к бесконечному циклу. Чтобы исправить эту проблему, можно использовать знаковый целочисленный тип, такой как int:
    for (int i = (int)str.length() - 1; i >= 0; i--)

 

2) Диапазонный цикл for (C++11 и выше) для итерации через символы строки:

#include <iostream>
#include <string>

using namespace std;

int main() 
{
    string str = "Hello, world!";
    
    for (char c : str) 
    {
        cout << c << " ";
    }
    
    return 0;
}

Поясним в этом примере только строчку с диапазонным циклом for:

  • for: Это ключевое слово начала цикла.
  • (char c : str): Это часть объявления цикла, где char c является объявлением переменной итерации, которая будет использоваться для хранения каждого символа строки по очереди. str - это строка, через которую будет проходить цикл.

Цикл "диапазонного for" является сокращенным способом итерации по контейнеру (или диапазону) значений в языке C++. В данном случае, строка str рассматривается как контейнер символов, и цикл перебирает каждый символ, присваивая его переменной c.

Каждую итерацию цикла переменная c принимает значение текущего символа строки str. Внутри тела цикла (внутри фигурных скобок {}) вы можете выполнять операции с переменной c, которая представляет текущий символ строки.

 

Задача
Во входной строке заменить все символы 'a' на символы 'b'. 
#include <iostream>
#include <string>

using namespace std;

int main() 
{
    string s;
    cin >> s;

    for (size_t i = 0; i < s.length(); ++i) 
    {
        if (s[i] == 'a') 
        {
            s[i] = 'b';
        }
    }

    cout << s << endl;

    return 0;
}
В данной программе цикл for с переменной i перебирает индексы символов в строке s. Внутри цикла проверяется символ с индексом i, и если он равен 'a', то символ заменяется на 'b'. Таким образом, изменение символов происходит  непосредственно внутри строки s.

Задача

Напишите программу, которая в строке заменяет все точки на нули и все заглавные английские буквы "X" на единицы. 
 
Примеры
Входные данные Выходные данные
1 ..X..XX 0010011

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w64416
Python1
Комментарий учителя