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

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

Войти
Регистрация
Восстановить пароль
 
neske
1461 / 828 / 69
Регистрация: 26.03.2010
Сообщений: 2,820
#1

Строки. - C++

19.10.2011, 15:25. Просмотров 357. Ответов 8
Метки нет (Все метки)

В какой - то ступор впал.
Нужно считать символ, а затем строку.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
int main () {
    char ch;
    std::string str;
    std::cin >> ch;
    std::cin.ignore ('\n');
    std::getline (std::cin, str);
    //
    std::cout << str;
    //
    return 0;
}
работает неверно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2011, 15:25     Строки.
Посмотрите здесь:

строки, именно строки C++
C++ С-строки, string-строки
Разбиение строки на 2 строки C++
C++ Строки и указатели на строки

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
19.10.2011, 15:28     Строки. #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
int main () {
    char ch;
    std::string str;
    std::cin >> ch;
    std::cin.ignore (1, '\n');
    std::getline (std::cin, str);
    //
    std::cout << str;
    //
    return 0;
}
neske
1461 / 828 / 69
Регистрация: 26.03.2010
Сообщений: 2,820
19.10.2011, 16:13  [ТС]     Строки. #3
точно, спасибо )

Добавлено через 43 минуты
Не стал новую тему создавать.

Почему такой вариант не работает -
C++
1
std::transform (str.begin(), str.end(), str.begin(), std::toupper);
А такой
C++
1
std::transform (str.begin(), str.end(), str.begin(), ::toupper);
или такой
C++
1
std::transform (str.begin(), str.end(), str.begin(), toupper);
работают?
rangerx
1921 / 1530 / 139
Регистрация: 31.05.2009
Сообщений: 2,892
19.10.2011, 17:25     Строки. #4
Дело в том, что таких функций в C++ две, одна находится в <cctype>, а вторая в <locale>. Либо не указывай пространство имён, либо сделай так
C++
1
2
std::transform (str.begin(), str.end(), str.begin(), 
                static_cast<int(*)(int)>(std::toupper));
neske
1461 / 828 / 69
Регистрация: 26.03.2010
Сообщений: 2,820
19.10.2011, 17:32  [ТС]     Строки. #5
rangerx, но я в решении указал библиотеку cctype, то есть функцию он берет от туда. Или главное сам факт, что их две?)
asics
Freelance
Эксперт C++
 Аватар для asics
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
19.10.2011, 18:01     Строки. #6
Цитата Сообщение от neske Посмотреть сообщение
что их две?
Ну да, одна унаследована из Си -
C++
1
int toupper ( int c );
,
вторая чисто С++`шная -
C++
1
2
template <class charT>
charT toupper ( charT c, const locale& loc );
rangerx
1921 / 1530 / 139
Регистрация: 31.05.2009
Сообщений: 2,892
19.10.2011, 19:34     Строки. #7
neske, достаточно подключить какой-нибудь заголовок, в котором используется <locale>(например, <iostream>) и можешь считать, что и <locale> ты подключил тоже.
neske
1461 / 828 / 69
Регистрация: 26.03.2010
Сообщений: 2,820
19.10.2011, 19:38  [ТС]     Строки. #8
rangerx, а я и не знал о таком.. спасибо.
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
20.10.2011, 10:50     Строки. #9
Цитата Сообщение от neske Посмотреть сообщение
но я в решении указал библиотеку cctype, то есть функцию он берет от туда. Или главное сам факт, что их две?
Будет использована та функция, которая при просмотре заголовочных файлов будет найдена первая (см. Википедия). Файл clocale может быть неявно подключен в других заголовочных файлах
Yandex
Объявления
20.10.2011, 10:50     Строки.
Ответ Создать тему
Опции темы

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