5049. Удали пробелы

 

Дана строка. Преобразуйте все идущие подряд пробелы в один.

 

Вход. Одна строка символов с длиной не более 1000.

 

Выход. Выведите измененную строку.

 

Пример входа

Пример выхода

  d   hky   k

 d hky k

 

 

РЕШЕНИЕ

обработка строк

 

Анализ алгоритма

Прочитаем входную строку s. Припишем к ней 0-байт. Будем выводить символ s[i] лишь в том случае, если он и следующий за ним символы не являются пробелами. В случае присутствия идущих подряд пробелов будет выведен только один пробел.

 

Реализация алгоритма

Объявим входную строку s и выходную строку res.

 

string s, res;

 

Читаем входную строку s. Добавим 0-байт в конец строки.

 

getline(cin,s);

s = s + (char)0;

 

Перебираем символы строки s кроме последнего 0-байта.

 

for(int i = 0; i < s.size() - 1; i++)

{

 

Если текущий символ и следующий за ним пробелы, то текущий символ не выводим. Если si – последний символ реальной входной строки, то si+1 будет равно 0 и мы не выйдем за границы строки.

 

  if (s[i] == ' ' && s[i+1] == ' ') continue;

 

Иначе приписываем текущий символ si к результирующей строке res.

 

  res = res + s[i];

}

 

Выводим ответ.

 

cout << res << endl;

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    String s = con.nextLine();

    s = s + (char)0;

    String res = "";

    for (int i = 0; i < s.length() - 1; i++)

    {

       if (s.charAt(i) == ' ' && s.charAt(i+1) == ' ') continue;

       res = res + s.charAt(i);

    }

    System.out.println(res);

    con.close();

  }

}

 

Python реализация

 

import re

 

Читаем входную строку s.

 

s = input()

 

Последовательность идущих подряд пробелов заменяем одним пробелом.

 

res = re.sub(r'\s+', ' ', s)

 

Выводим ответ.

 

print(res)