Задача. В заданной строке заменить подряд идущие пробелы на один пробел.
Тесты:
Ввод | Вывод | Комментарий |
as fg t | as fg t | Пройден |
rty g uio | rty g uio | Пройден |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> #include <string> using namespace std; int main() { string a; getline(cin,a); string b; b+=a[0]; for (int i=1; i<a.length(); i++) { if ((a[i]!=' ')|| ((a[i]==' ') and (a[i-1]!=' '))) b+=a[i]; } cout<<b; return 0; } |
Будем записывать подходящие элементы в новую строку. Сразу добавим первый символ, он нам подходит вне зависимости от того, пробел он, или нет. Далее просмотрим каждый символ строки, если он нам подходит, запишем в новую строку. Нулевой элемент уже добавлен, поэтому цикл начинается с единицы, что позволяет проверять предыдущий символ без выхода за границы.
С работой программы можно ознакомиться здесь.
Проверил. Работает, но:
— зачем два условных оператора с одним и тем же действием?
— если в начале строки стоит пробел, то Вы обращаетесь к несуществующей «минус первой» букве строки. Если я не ошибаюсь, то это «undefined behavior». Проверьте меня, пожалуйста по документации.
Количество условных операторов изменила.
В ситуации, когда нулевой элемент данной строки пробел, он попадает в новую строку еще до цикла. Цикл начинается с 1, то есть к «минус первой» букве мы не обращаемся.
Зачтено