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

Смена регистра в словах - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
HanteR
1 / 1 / 0
Регистрация: 23.10.2009
Сообщений: 53
25.06.2010, 13:24     Смена регистра в словах #1
Помогите пожалуйста написать программу: Заданный текст превратить таким образом, чтобы каждое слово начиналось с большой буквы. Считать, что слова текста разделены одним пробелом.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
25.06.2010, 13:29     Смена регистра в словах #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <conio.h>
 
using namespace std;
 
int main()
{
     string s;
     while(cin >> s)
     {
           if(s[0] >= 'a' && s[0] <= 'z')
                 s[0] += 'A' - 'a';
           cout << s << ' ';
     }
}
Для выхода нажать ctrl+Z.
Кто-нить, научите меня уже, что делать штоб не нужно было ctrl+Z нажимать? Чтоб она читала до конца строки и успокаивалась.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
25.06.2010, 13:34     Смена регистра в словах #3
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
#include <iostream>
#include <string>
#include <sstream>
#include <cctype>
 
int main(){
    std::string buf;
    
    while ( true ){
        std::cout << "String: ";
        std::getline(std::cin, buf);
        if ( buf.empty() )
            break;
        std::istringstream ist(buf);
        std::ostringstream ost;
        while ( ist >> buf ){
            *buf.begin() = toupper(*buf.begin());
            ost << buf << ' ';
        }
        std::cout << "Result: " << ost.str() << std::endl;
    }
    
    return 0;
}
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.06.2010, 13:38     Смена регистра в словах #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream.h>
 
int main(int argc, char* argv[])
{
   char str[512] = {'\0'};
 
   cout << "Vvedite stroku: ";
   cin.getline(str, 511);
   cin.sync();
   for (unsigned int i = 0; i < strlen(str); i++)
   {
      if ((i == 0 || str[i-1] == ' ')&&(str[i] >= 'a' && str[i] <= 'z'))
         str[i] -= 'a' - 'A';
   }
   cout << str << endl;
   cin.get();
   return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Хохол Посмотреть сообщение
Кто-нить, научите меня уже, что делать штоб не нужно было ctrl+Z нажимать? Чтоб она читала до конца строки и успокаивалась.
C++
1
2
3
int symbol;
while ((symbol = cin.get()) != '\n')
{}
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
25.06.2010, 14:02     Смена регистра в словах #5
Немного плагиата, и получаем такой вариант:
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 <string>
#include <sstream>
 
using namespace std;
 
int main()
{
    string buf, s;
    while(getline(cin,buf), !buf.empty())
    {
        stringstream in(buf);
        while(in >> s)
        {
            if(s[0] >= 'a' && s[0] <= 'z')
                 s[0] += 'A' - 'a';
            cout << s << ' ';
        }
        cout << endl;
    }
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
25.06.2010, 15:42     Смена регистра в словах #6
Хохол, а функцию toupper() по религиозным соображениям предпочитаете не использовать?
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
25.06.2010, 15:49     Смена регистра в словах #7
Ой, не заметил. Это ж минус строка кода! Ща исправим.

Добавлено через 1 минуту
Гыгы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <sstream>
 
using namespace std;
 
int main()
{
        string buf, s;
        while(getline(cin,buf), !buf.empty())
        {
                stringstream in(buf);
                while(in >> s)
                {
                        s[0] = toupper(s[0]);
                        cout << s << ' ';
                }
                cout << endl;
        }
}
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
25.06.2010, 15:51     Смена регистра в словах #8
Цитата Сообщение от Хохол Посмотреть сообщение
Ой, не заметил. Это ж минус строка кода! Ща исправим.
Это не только минус строка кода
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
25.06.2010, 15:58     Смена регистра в словах #9
А что еще?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
25.06.2010, 16:06     Смена регистра в словах #10
Цитата Сообщение от Хохол Посмотреть сообщение
А что еще?
Если я все правильно понимаю, то toupper может зависеть от используемого языка.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
25.06.2010, 16:06     Смена регистра в словах #11
Цитата Сообщение от Хохол Посмотреть сообщение
Это ж минус строка кода!
Эта "минус строка" компенсируется "include <cctype>", а то мелкомягкий компилятор "опаньки" скажет. Разница действительно не в количестве строк кода...
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
25.06.2010, 16:08     Смена регистра в словах #12
Проверил ща, у меня в VS c русскими буквами не работает.

Добавлено через 57 секунд
easybudda, я не инклудил сctype, но все работает.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
25.06.2010, 16:14     Смена регистра в словах #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <locale>
 
int main()
{
   setlocale(LC_ALL, "RUS");
 
   std::string str = "привет";
   std::cout << str << std::endl;
 
   for(int i = 0; i < str.length(); ++i)
      str[i] = toupper(str[i]);
 
   std::cout << str << std::endl;
 
   system("pause");
   return 0;
}
Код
привет
ПРИВЕТ
Press any key to continue . . .
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
25.06.2010, 16:28     Смена регистра в словах #14
Понятно, спсы. Правда у меня после вызова этой штуки перестают нормально считываться русские буквы. Пишутся и обрабатываются нормально, читаются неверно.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
25.06.2010, 16:32     Смена регистра в словах #15
Цитата Сообщение от Хохол Посмотреть сообщение
Правда у меня после вызова этой штуки перестают нормально считываться русские буквы. Пишутся и обрабатываются нормально, читаются неверно.
да с русским языком в принципе везде косяки, лучше не писать по-русски
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
25.06.2010, 16:42     Смена регистра в словах #16
Согласен, поэтому никогда и не пишу в программах.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2010, 18:30     Смена регистра в словах
Еще ссылки по теме:

C++ Функция преобразует буквы верхнего регистра в строке s в буквы нижнего регистра
C++ Удалить в словах буквы е
Символ s в нечетных словах C++

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

Или воспользуйтесь поиском по форуму:
HanteR
1 / 1 / 0
Регистрация: 23.10.2009
Сообщений: 53
25.06.2010, 18:30  [ТС]     Смена регистра в словах #17
Спасибо всем большое!!!
Yandex
Объявления
25.06.2010, 18:30     Смена регистра в словах
Ответ Создать тему
Опции темы

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