Редакция для Заглавные в начале слов


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Разбор задачи «Заглавные в начале слов»

1. Идея

Строка состоит из слов, разделённых одиночными пробелами. Нужно у каждого слова сделать первую букву заглавной, а остальные — строчными. Достаточно разбить строку по пробелам, преобразовать каждое слово и снова склеить пробелами.


2. Наблюдения

Для одного слова преобразование простое: первый символ переводим в верхний регистр, все последующие — в нижний. Пустых слов не возникает, если разделитель — ровно один пробел, но аккуратная обработка пустого слова не помешает.


3. Алгоритм

  1. Прочитать строку целиком (в ней есть пробелы).
  2. Разбить её на слова по пробелу.
  3. У каждого слова первую букву сделать заглавной, остальные — строчными.
  4. Склеить слова обратно через пробел и вывести.

4. Почему это работает

Каждое слово обрабатывается независимо, а порядок слов и одиночные пробелы между ними сохраняются, потому что мы разбиваем и склеиваем по одному и тому же разделителю. Значит, результат — та же последовательность слов, но в нужном регистре.


5. Сложность

Каждый символ строки обрабатывается ровно один раз, поэтому время и память — O(|s|).


Код на C++17

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main() {
    string s;
    getline(cin, s);

    string result = s;
    for (int i = 0; i < (int)s.size(); i++) {
        if (s[i] == ' ') {
            result[i] = ' ';
        } else {
            if (i == 0 || s[i - 1] == ' ') {
                result[i] = (char)toupper((unsigned char)s[i]);
            } else {
                result[i] = (char)tolower((unsigned char)s[i]);
            }
        }
    }

    cout << result << "\n";
    return 0;
}

Код на Python 3

s = input()
words = s.split(" ")
res = []
for w in words:
    if w:
        res.append(w[0].upper() + w[1:].lower())
    else:
        res.append(w)
print(" ".join(res))

Комментарии

Еще нет ни одного комментария.