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

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

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

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

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

Дано предложение на латинском языке.Превратить строку так, чтобы каждое слово начиналось с большой буквы
0
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
Сообщений: 385
Завершенные тесты: 3
17.06.2013, 13:11 #2
Ищите слова и в каждом слове заменяйте 1 букву, для этого используйте функцию toupper() из библиотеки <ctype>
1
Hrustik
2 / 2 / 0
Регистрация: 29.05.2013
Сообщений: 143
17.06.2013, 13:16  [ТС] #3
Цитата Сообщение от atoi Посмотреть сообщение
Ищите слова и в каждом слове заменяйте 1 букву, для этого используйте функцию toupper() из библиотеки <ctype>
ого я такого не учил еще можно как-то чем полегче сделать ету програмку?
0
atoi
129 / 123 / 51
Регистрация: 18.05.2013
Сообщений: 385
Завершенные тесты: 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;
}
0
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
17.06.2013, 14:02 #5
atoi, можно проще - код символа 'A' = 65, 'a' = 97 - значит нужно для первой букву каждого слова код увеличить на 32
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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]);
}
0
atoi
129 / 123 / 51
Регистрация: 18.05.2013
Сообщений: 385
Завершенные тесты: 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;
}
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
17.06.2013, 14:14 #8
atoi, а вы после strtok попробуйте снова строку на экран вывести. она будет испорчена
0
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
17.06.2013, 14:15 #9
Цитата Сообщение от atoi Посмотреть сообщение
наоборот, отнять 32)
то есть да - отнять
0
atoi
129 / 123 / 51
Регистрация: 18.05.2013
Сообщений: 385
Завершенные тесты: 3
17.06.2013, 14:16 #10
Цитата Сообщение от rangerx Посмотреть сообщение
Выходите за пределы массива
не поясните, где выход за пределы массива? я тоже учусь, хочется узнать свои ошибки, чтобы потом не допускать их.
Цитата Сообщение от Thinker Посмотреть сообщение
atoi, а вы после strtok попробуйте снова строку на экран вывести. она будет испорчена
это и понятно, конечно, хороший стиль программирования подразумевает не портить исходные данные, в следующий раз учту. Спасибо. Надо было бы скопировать эту строку в другой массив и работать с ним.
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2013, 14:33
Привет! Вот еще темы с ответами:

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

Отредактировать файл так, чтобы каждое слово находилось на отдельной строке - C++
Помогите записать програмно файл так чтобы в каждой строчке было одно слово. например исходный файл 1111 1111 1111 1111 ...

Каждое слово преобразовать так, чтобы оно читалось слева направо - C++
Помогите решить задачу: Дана последовательность из n символов, состоящую из нескольких слов. Каждое слово преобразовать так, чтобы оно...

Преобразовать каждое слово в строке, удалив из него все вхождения первой буквы этого слова - C++
Дана строка, состоящая из символов латинского алфавита, разделенных пробелами (одним или несколькими). Преобразовать каждое слово в строке,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.06.2013, 14:33
Ответ Создать тему
Опции темы

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