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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
AdPotam
2 / 2 / 0
Регистрация: 29.11.2010
Сообщений: 73
#1

Как реализовать tolower()? - C++

10.01.2011, 17:35. Просмотров 1381. Ответов 6
Метки нет (Все метки)

Подскажите, пожалуйста, как применить функцию tolower() к переменной типа vector<int>::size_type
Вот фрагмент кода, приводящий к ошибке:
C++
1
2
3
4
 vector<string> sval;
.....
for (vector<int>::size_type i = 0; i != sval.size(); ++i) 
 sval[i] = tolower(sval[i]);
Вот ошибка:

error: no matching function for call to 'tolower(std::basic_s
tring<char>&)'

Компилятор - GCC
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2011, 17:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как реализовать tolower()? (C++):

функция tolower() - C++
Необходимо изменить регистр на нижний. Как только не пробовал не получается. Получается если я задаю строку заранее, что на русском что...

toupper, tolower, strlen и кириллица - C++
Эти три функции не хотят нормально работать с кириллицей. Если им скормить американские литеры, все нормально. Но вот, например, эта...

Tolower для русских букв - C++
Есть символьный массив с русскими буквами: &quot;Сегодня Прекрасная Погода&quot;. Мне нужно заглавные буквы изменить с верхнего регистра на нижний....

Функции tolower,islower,isupper - C++
Если кто знаком с функциями tolower,islower,isupper, дайте пожалуйста с каждой примитивный пример с маленьким коментом, как их...

Найти первые вхождения символов (функции strchr(), tolower()) - C++
В массиве строк , введенных пользователем , найти первые вхождения символов ' s ' и 'S' . Использовать функции strchr ( ) , tolower ( ) .

Заменить функцию tolower на ручную функцию - C++
В общем проблема такова. Tolower работает только с англ.яз вводимых данных. А мне нужно что бы работало на рус. Какой ручной функцией...

6
reich
110 / 46 / 3
Регистрация: 03.09.2009
Сообщений: 112
10.01.2011, 18:01 #2
tolower принимает идентификатор символа(значение из таблицы ASCII кодов)
То есть передавать туда нужно символ, а не строку
C++
1
2
3
4
5
    for ( std::vector<std::string>::const_iterator p = sval.begin(); p != sval.end(); ++p ){
        for ( std::string::const_iterator s = (*p).begin(); s != (*p).end(); ++s ){
            std::cout << static_cast<char>( tolower( (*s) ) );
        }
    }
Добавлено через 4 минуты
вот так все строки в векторе заменятся на такие же только символами в нижнем регистре.(первый вариант их выведет в консоль)
C++
1
2
3
4
5
    for ( std::vector<std::string>::iterator p = sval.begin(); p != sval.end(); ++p ){
        for ( std::string::iterator s = (*p).begin(); s != (*p).end(); ++s ){
            (*s) = static_cast<char>( tolower( (*s) ) );
        }
    }
1
AdPotam
2 / 2 / 0
Регистрация: 29.11.2010
Сообщений: 73
10.01.2011, 18:17  [ТС] #3
reich, понятно, итераторы ещё не проходил, они в следующем парагафе. Странно, почему автор книги дает задания, для решения которых нужны знания, которые читатели еще не проходили?
0
reich
110 / 46 / 3
Регистрация: 03.09.2009
Сообщений: 112
10.01.2011, 18:21 #4
Цитата Сообщение от AdPotam Посмотреть сообщение
reich, понятно, итераторы ещё не проходил, они в следующем парагафе. Странно, почему автор книги дает задания, для решения которых нужны знания, которые читатели еще не проходили?
тут не обязательно использовать итераторы
C++
1
2
3
4
5
6
7
    int sz_string = 0, sz_vector = sval.size();
    for ( int i = 0; i < sz_vector; i++ ){
        sz_string = sval[i].size();
        for ( int j = 0; j < sz_string; j++ ){
            sval[i][j] = (char)tolower( sval[i][j] );
        }
    }
0
AdPotam
2 / 2 / 0
Регистрация: 29.11.2010
Сообщений: 73
10.01.2011, 19:06  [ТС] #5
Почему нельзя написать так, выкидывает ту же ошибку, вроде привел к char-у:
C++
1
2
       for (vector<int>::size_type i = 0; i != sval.size(); ++i) 
    sval[i] = (char) tolower(sval[i]);
0
reich
110 / 46 / 3
Регистрация: 03.09.2009
Сообщений: 112
10.01.2011, 20:04 #6
Цитата Сообщение от AdPotam Посмотреть сообщение
Почему нельзя написать так, выкидывает ту же ошибку, вроде привел к char-у:
C++
1
2
       for (vector<int>::size_type i = 0; i != sval.size(); ++i) 
    sval[i] = (char) tolower(sval[i]);
Потому, что sval[i] - это std::string, а не int
0
AdPotam
2 / 2 / 0
Регистрация: 29.11.2010
Сообщений: 73
12.01.2011, 09:48  [ТС] #7
Понятно, спасибо reich!
0
12.01.2011, 09:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2011, 09:48
Привет! Вот еще темы с ответами:

Указатель на имя файла как аргумент функции. Как реализовать? - C++
Доброго времени суток всем! Прошу помощи! Написал программу, есть пару моментов, сложных для меня. Необходимо написать две функции, одну...

незнаю как вывести полное решение для задачки.смысл улавливаю, а как реализовать - туплю - C++
Задана окружность, с помощью координат центра и радиуса. Определить, лежит ли она полностью в первой четверти. 1вывожу окружность и ...

Как процедуру в Паскале реализовать, как функцию в с++? - C++
Здравствуйте! Есть код на Паскале. Нужно процедуру реализовать в С++ как функцию. Возможно ли в моем случае? Попробовал по-всякому, но у...

Необходимо реализовать шаблонный класс Array, и грамотно реализовать push_back - C++
Необходимо реализовать шаблонный класс Array, параметризируемый типом хранимых элементов. Класс Array представляет собой...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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