Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Hrustik
2 / 2 / 0
Регистрация: 29.05.2013
Сообщений: 137
#1

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

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

Дано предложение на латинском языке.Превратить строку так, чтобы каждое слово начиналось с большой буквы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2013, 13:07     чтобы каждое слово начиналось с большой буквы
Посмотрите здесь:
Превратить строку так, чтобы каждое слово начиналось с большой буквы C++
C++ Обеспечить, чтобы каждое новое предложение в тексте начиналось с большой буквы
В тексте удалить каждое четное слово, продублировать каждое нечетное слово C++
Разделить каждое слово из текста на буквы, затем закодировать каждую букву C++
C++ Напечатать в алфавитном порядке все звонкие буквы которые входят в каждое слово
C++ Преобразовать каждое слово в строке, удалив из него все последующие вхождения первой буквы
Каждое слово преобразовать так, чтобы оно читалось слева направо C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
atoi
129 / 123 / 51
Регистрация: 18.05.2013
Сообщений: 377
Завершенные тесты: 3
17.06.2013, 13:11     чтобы каждое слово начиналось с большой буквы #2
Ищите слова и в каждом слове заменяйте 1 букву, для этого используйте функцию toupper() из библиотеки <ctype>
Hrustik
2 / 2 / 0
Регистрация: 29.05.2013
Сообщений: 137
17.06.2013, 13:16  [ТС]     чтобы каждое слово начиналось с большой буквы #3
Цитата Сообщение от atoi Посмотреть сообщение
Ищите слова и в каждом слове заменяйте 1 букву, для этого используйте функцию toupper() из библиотеки <ctype>
ого я такого не учил еще можно как-то чем полегче сделать ету програмку?
atoi
129 / 123 / 51
Регистрация: 18.05.2013
Сообщений: 377
Завершенные тесты: 3
17.06.2013, 13:31     чтобы каждое слово начиналось с большой буквы #4
Даже проще: смысл в том, что если текущий символ пробел, то следующий символ делаем заглавным.

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;
}
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 2
17.06.2013, 14:02     чтобы каждое слово начиналось с большой буквы #5
atoi, можно проще - код символа 'A' = 65, 'a' = 97 - значит нужно для первой букву каждого слова код увеличить на 32
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
17.06.2013, 14:12     чтобы каждое слово начиналось с большой буквы #6
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]);
}
atoi
129 / 123 / 51
Регистрация: 18.05.2013
Сообщений: 377
Завершенные тесты: 3
17.06.2013, 14:12     чтобы каждое слово начиналось с большой буквы #7
Цитата Сообщение от Кудаив Посмотреть сообщение
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;
}
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
17.06.2013, 14:14     чтобы каждое слово начиналось с большой буквы #8
atoi, а вы после strtok попробуйте снова строку на экран вывести. она будет испорчена
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 2
17.06.2013, 14:15     чтобы каждое слово начиналось с большой буквы #9
Цитата Сообщение от atoi Посмотреть сообщение
наоборот, отнять 32)
то есть да - отнять
atoi
129 / 123 / 51
Регистрация: 18.05.2013
Сообщений: 377
Завершенные тесты: 3
17.06.2013, 14:16     чтобы каждое слово начиналось с большой буквы #10
Цитата Сообщение от rangerx Посмотреть сообщение
Выходите за пределы массива
не поясните, где выход за пределы массива? я тоже учусь, хочется узнать свои ошибки, чтобы потом не допускать их.
Цитата Сообщение от Thinker Посмотреть сообщение
atoi, а вы после strtok попробуйте снова строку на экран вывести. она будет испорчена
это и понятно, конечно, хороший стиль программирования подразумевает не портить исходные данные, в следующий раз учту. Спасибо. Надо было бы скопировать эту строку в другой массив и работать с ним.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2013, 14:33     чтобы каждое слово начиналось с большой буквы
Еще ссылки по теме:
C++ Отредактировать файл так, чтобы каждое слово находилось на отдельной строке
Преобразовать каждое слово в строке, удалив из него все вхождения первой буквы этого слова C++
Напечатать сообщение «This is a C program» так, чтобы каждое слово располагалось в новой строке C++
Преобразовать каждое слово в строке, заменив в нем все последующие вхождения его первой буквы на символ «.» C++
C++ Преобразовать каждое слово в строк, заменив в нем все предыдущие вхождения его последней буквы на символ «.»

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

Или воспользуйтесь поиском по форуму:
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
17.06.2013, 14:33     чтобы каждое слово начиналось с большой буквы #11
Цитата Сообщение от 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)
Yandex
Объявления
17.06.2013, 14:33     чтобы каждое слово начиналось с большой буквы
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru