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

Замена первой буквы на заглавную - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
spooky81
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 16
14.05.2013, 21:39     Замена первой буквы на заглавную #1
здравствуйте, помочите с созданием функции:
надо поменять первую букву каждого слова на заглавную в строке в стиле Си
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14197 / 6212 / 985
Регистрация: 02.05.2013
Сообщений: 10,348
Завершенные тесты: 1
14.05.2013, 21:43     Замена первой буквы на заглавную #2
std::toupper
spooky81
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 16
14.05.2013, 21:46  [ТС]     Замена первой буквы на заглавную #3
Спасибо, но нужно написать собственную функцию))
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
14.05.2013, 21:53     Замена первой буквы на заглавную #4
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
#include <cstring>
#include <cctype>
 
const char* upperFirst(char* str)
{
    bool state = true;
    for (char* pt = str; *pt != '\0'; ++pt)
    {
        if (isspace(*pt))
        {
            state = true;
        }
        else if (state && isalnum(*pt))
        {
            state = false;
            *pt = toupper(*pt);
        }
    }
    return str;
}
 
int main()
{   
    char str[] = "hello world...., and peace. to all.";
    std::cout << upperFirst(str) << std::endl;
}
Добавлено через 1 минуту
Убежденный, toupper() не меняет первую букву каждого слова на заглавную
Убежденный
Системный программист
 Аватар для Убежденный
14197 / 6212 / 985
Регистрация: 02.05.2013
Сообщений: 10,348
Завершенные тесты: 1
14.05.2013, 21:56     Замена первой буквы на заглавную #5
Если только для латиницы, тогда так:
берем код символа, определяем, попадает ли он в диапазон "a-z", если да -
сбрасываем пятый бит. Но это будет работать только для латиницы.
Вообще, не во всех языках возведение символа в верхний регистр имеет смысл и
локализации не зря придумали. Поэтому "просто так" такую функцию самому не написать.

Добавлено через 39 секунд
Цитата Сообщение от xtorne21st Посмотреть сообщение
Убежденный, toupper() не меняет первую букву каждого слова на заглавную
А что, циклы в C++ уже отменили ?
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
14.05.2013, 22:08     Замена первой буквы на заглавную #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
#include <iostream>
 
const char* upperFirst(char* str)
{
    bool state = true;
    for (char* pt = str; *pt != '\0'; ++pt)
    {
        if (*pt == ' ' || *pt == '\n' || *pt == '\t')
        {
            state = true;
        }
        else if (state && (*pt != ' ' || *pt != '\n' || *pt != '\t'))
        {
            state = false;
            *pt &= ~(1 << 5);
        }
    }
    return str;
}
 
int main()
{   
    char str[] = "hello world...., and peace. to all.";
    std::cout << upperFirst(str) << std::endl;
}
Добавлено через 2 минуты
Но что-то мне кажется, что последний вариант более платформозависимый. Ибо нет гарантии что "хак" с битами будет одинаково интерпретироваться на всех машинах одинаково.
Убежденный
Системный программист
 Аватар для Убежденный
14197 / 6212 / 985
Регистрация: 02.05.2013
Сообщений: 10,348
Завершенные тесты: 1
14.05.2013, 22:12     Замена первой буквы на заглавную #7
Цитата Сообщение от xtorne21st Посмотреть сообщение
Но что-то мне кажется, что последний вариант более платформозависимый. Ибо нет гарантии что "хак" с битами будет одинаково интерпретироваться на всех машинах одинаково.
Да, согласен. Но дело не только в битах.
Правильная реализация данной функции должна принимать два аргумента - строку и локаль.
И использовать эту локаль для приведения символов в верхний регистр.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2013, 15:58     Замена первой буквы на заглавную
Еще ссылки по теме:

Замена отрицательных элементов первой строчки на 0 C++
C++ Вывод первой буквы из массива
C++ Вывести слова в предложении по номеру первой буквы в алфавите

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

Или воспользуйтесь поиском по форуму:
tomichka
Сообщений: n/a
02.07.2013, 15:58     Замена первой буквы на заглавную #8
Прошу прощения за некомпетентный вопрос, но если я не программист и не пишу коды, возможно ли какой-то совсем простой опцией включить автозамену первой буквы предложения на заглавную? Купила новый ноут для работы, на Win8, ужасно бесят маленькие буквы в начале предложений(( На автомате пишу так, потом приходится вручную исправлять... Заранее спасибо за ответ!
Yandex
Объявления
02.07.2013, 15:58     Замена первой буквы на заглавную
Ответ Создать тему
Опции темы

Текущее время: 13:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru