Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
2 / 2 / 2
Регистрация: 29.05.2013
Сообщений: 143

чтобы каждое слово начиналось с большой буквы

17.06.2013, 13:07. Показов 8655. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дано предложение на латинском языке.Превратить строку так, чтобы каждое слово начиналось с большой буквы
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.06.2013, 13:07
Ответы с готовыми решениями:

Превратить строку так, чтобы каждое слово начиналось с большой буквы
Дано предложение на латинском языке.Превратить строку так, чтобы каждое слово начиналось с большой буквы

Изменить текст так, чтобы каждое предложение начиналось с большой буквы
Есть некоторый текст. Используя стандартные строковые функции из библиотеки языка C. . Изменить текст таким образом, чтобы каждое...

Обеспечить, чтобы каждое новое предложение в тексте начиналось с большой буквы
Данная программа должна обеспечить, чтобы каждое новое предложение в тексте начиналось с большой буквы. Она работает, но не делает...

10
140 / 133 / 88
Регистрация: 18.05.2013
Сообщений: 399
17.06.2013, 13:11
Ищите слова и в каждом слове заменяйте 1 букву, для этого используйте функцию toupper() из библиотеки <ctype>
1
2 / 2 / 2
Регистрация: 29.05.2013
Сообщений: 143
17.06.2013, 13:16  [ТС]
Цитата Сообщение от atoi Посмотреть сообщение
Ищите слова и в каждом слове заменяйте 1 букву, для этого используйте функцию toupper() из библиотеки <ctype>
ого я такого не учил еще можно как-то чем полегче сделать ету програмку?
0
140 / 133 / 88
Регистрация: 18.05.2013
Сообщений: 399
17.06.2013, 13:31
Даже проще: смысл в том, что если текущий символ пробел, то следующий символ делаем заглавным.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cctype>
using namespace std;
 
int main()
{   
    char str[]="this is a test";
        str[0]=toupper(str[0]);
        for (int i=0; i<=strlen(str); i++)
        {
        if (str[i]==' ')
            str[i+1]=toupper(str[i+1]);
        }
    cout<<"str= "<<str<<endl;
    return 0;
}
0
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
17.06.2013, 14:02
atoi, можно проще - код символа 'A' = 65, 'a' = 97 - значит нужно для первой букву каждого слова код увеличить на 32
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
17.06.2013, 14:12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <cstddef>
#include <cstring>
#include <cctype>
#include <iostream>
 
using namespace std;
 
int main()
{
    char str[100];
    cout << "input string: ";
    cin.getline(str, sizeof(str));
 
    if(*str != '\0')
    {
        const char* delim = " ,.:;!?\t";
 
        for(size_t i = 1; str[i] != '\0'; ++i)
            if(isalpha(str[i]) && strchr(delim, str[i - 1]))
                str[i] = toupper(str[i]);
 
        if(isalpha(str[0]))
            str[0] = toupper(str[0]);
    }
 
    cout << "result: " << str << endl;
}
Добавлено через 3 минуты
Цитата Сообщение от atoi Посмотреть сообщение
for (int i=0; i<=strlen(str); i++)
* * * * {
* * * * if (str[i]==' ')
* * * * * * str[i+1]=toupper(str[i+1]);
* * * * }
Выходите за пределы массива
C++
1
2
3
4
5
6
7
8
#include <cassert>
//...
for (int i=0; i<=strlen(str); i++)
{
    assert(i+1 <= strlen(str)); // !!!
    if (str[i]==' ')
        str[i+1]=toupper(str[i+1]);
}
0
140 / 133 / 88
Регистрация: 18.05.2013
Сообщений: 399
17.06.2013, 14:12
Цитата Сообщение от Кудаив Посмотреть сообщение
atoi, можно проще - код символа 'A' = 65, 'a' = 97 - значит нужно для первой букву каждого слова код увеличить на 32
наоборот, отнять 32) Но тут будет косяк, допустим, что первая буква в первом слове будет уже заглавной...

вот другой вариант с поиском слов, на мой взгляд это лучше, хотя в конце добавляется лишний пробел...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cctype>
using namespace std;
 
int main()
{   
    char delims[]=" ,.;!&?";
    char str[]="this is a test";
    char *token=strtok(str, delims);
 
    while (token!=NULL)
    {   
        token[0]=toupper(token[0]);
        for (int i=0; i<=strlen(token); i++)
        str[i]=token[i];
        cout<<str<<" ";
        token=strtok(NULL, delims);
    }
    cout<<endl;
    return 0;
}
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
17.06.2013, 14:14
atoi, а вы после strtok попробуйте снова строку на экран вывести. она будет испорчена
0
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
17.06.2013, 14:15
Цитата Сообщение от atoi Посмотреть сообщение
наоборот, отнять 32)
то есть да - отнять
0
140 / 133 / 88
Регистрация: 18.05.2013
Сообщений: 399
17.06.2013, 14:16
Цитата Сообщение от rangerx Посмотреть сообщение
Выходите за пределы массива
не поясните, где выход за пределы массива? я тоже учусь, хочется узнать свои ошибки, чтобы потом не допускать их.
Цитата Сообщение от Thinker Посмотреть сообщение
atoi, а вы после strtok попробуйте снова строку на экран вывести. она будет испорчена
это и понятно, конечно, хороший стиль программирования подразумевает не портить исходные данные, в следующий раз учту. Спасибо. Надо было бы скопировать эту строку в другой массив и работать с ним.
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
17.06.2013, 14:33
Цитата Сообщение от atoi Посмотреть сообщение
не поясните, где выход за пределы массива? я тоже учусь, хочется узнать свои ошибки, чтобы потом не допускать их.
На самом деле все верно, это я не там поставил assert... Но проверка у вас всё равно одна лишняя. Последний символ строки расположен по индексу strlen(str) - 1, strlen(str) это уже '\0', следовательно нет смысла сравнивать этот символ с пробелом
C++
1
for(int i = 0; i < strlen(str); ++i)
А ещё лучше не использовать strlen в данном случае вообще
C++
1
for(int i = 0; str[i] != '\0'; ++i)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2013, 14:33
Помогаю со студенческими работами здесь

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

Преобразовать строку так, чтобы каждое слово начиналось с заглавной буквы
А можно такое же задание только С++?

Преобразовать строку так, чтобы каждое слово начиналось с заглавной буквы
Дана строка-предложение на русском языке. Преобразовать строку так, чтобы каждое слово начиналось с заглавной буквы.

Сделать так чтобы каждое предложения начиналось с большой буквы
Как сделать так чтобы каждое предложения начиналось с большой буквы, а остальное с маленькой.

Преобразовать строку таким образом, что бы каждое слово начиналось с большой буквы, а остальные были строчные
Дана строка. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru