Перебор всех символов
Для перебора символов в строке в 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;
}
В этом примере:
- Мы создаем строку
str
, которую хотим перебирать.
- Используя цикл
for
и переменную i
, проходим по каждому индексу символа от 0
до str.length() - 1
.
- Внутри цикла выводим символ на экран с помощью
cout
.
- Обратите внимание, что мы используем
str.length()
для получения длины строки.
- В результате каждый символ строки будет выведен на экран через пробел.
- Тип данных
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
.