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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
#1

Есть ли аналог isalpha, только для string - C++

15.10.2012, 00:36. Просмотров 1311. Ответов 10
Метки нет (Все метки)

Добрый вечер!
Как проверить, что введены только буквы, без символов, isalpha не прокатило , тока для символов
cout<<"enter a word:"<<endl;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
cin>>word;
while (true)
{
if(isalpha(word))
    {
        cout<<"You entered: "<<word<<endl<<endl;
        break;
    }
    else
    {
        cout<<"Error!!! Not word.\nEnter again: ";
        cin>>word;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2012, 00:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Есть ли аналог isalpha, только для string (C++):

Какой есть аналог isalpha для работы с русским алфавитом? - C++
Использую string и нужно проверять записан ли внутри текст или число. Какими средствами можно это сделать? Обычный isalpha(str.c_str())...

Есть ли аналог Map <String,String> чтобы передавать его как указатель на данные? - C++
Добрый день, подскажите, есть ли аналог Map &lt;String,String&gt; чтобы передавать его как указатель на данные? Заранее спасибо!

Есть ли аналог LOADBMP только для видео файлов в С++? - C++
Есть ли аналог LOADBMP только для видео файлов в С++?

Аналог функции isalpha() (<cctype>) - C++
Здравствуйте) Я так понял, функция isalpha() не работает с русскими буквами(?), пришлось написать свою версию для работы с русскими...

Аналог функции copy из делфи для string в С++ - C++
Предположим у нас есть 2 переменные типа string. Как из 1й скопировать часть в другую? К примеру в делфи это так: var ...

Аналог strncpy и strncmp для типа string - C++
Подскажите, как проводить операции сравнения и копировании с двумя строками типа string, при чём только над определённым количеством...

10
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
15.10.2012, 00:40 #2
Цитата Сообщение от letnjaja Посмотреть сообщение
Как проверить, что введены только буквы, без символов, isalpha не прокатило , тока для символов
цикл for_each и через лямбда выражение с помощью isalpha проверяете
0
KeyGen
384 / 291 / 6
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
15.10.2012, 00:40 #3
Воспользуйся регулярками. Вот статья:

Регулярные выражения в С++
0
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
15.10.2012, 01:09  [ТС] #4
а как-нибудь попроще можно проверить, что слово содержить только буквы?
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
15.10.2012, 09:10 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool isAlpha (std::string &str)
{
    for (int i = 0; i < str.length(); i++)
    {
        if (!isalpha(str[i]))
        {
            return false;
        }
    }
 
    return true;
}
0
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
15.10.2012, 13:01  [ТС] #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
28
29
30
31
32
33
string str;
 
int i;
 
bool isAlpha (std::string &str);
{
     cout<<"Enter word"<<endl;
     cin>>str;
    for (int i = 0; i < str.length(); i++)
    {
      
        if (!isalpha(str[i]))
        {
                             while (true) {
                    cout<<"Error!"<<endl;
                             cout<<"Enter word again:";
                             cin>>str;
                             
                             }
                             
                           
                             break;
                            return false;
             }
        
    }
 
    cout<<"You entered:"<<str;
    system("pause");
    
    return true;
   
}
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
15.10.2012, 13:05 #7
C++
1
2
3
4
5
while (true) {
cout<<"Error!"<<endl;
cout<<"Enter word again:";
cin>>str;                             
}
Нет выхода из цикла while
0
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
15.10.2012, 13:06 #8
C++
1
2
3
4
5
 while (true) {
    cout<<"Error!"<<endl;
    cout<<"Enter word again:";
    cin>>str;                             
}
А как вы думали это будет работать? Напишите какое-нибудь условие выхода из этого цикла
0
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
15.10.2012, 13:34  [ТС] #9
спасибо, поняла)

Добавлено через 14 минут
из цикла теперь выходит, но теперь другая проблемка, почему не выводит правильное значение?
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
28
29
30
string str;
 
int i;
 
bool isAlpha (std::string &str);
{
     cout<<"Enter word"<<endl;
     cin>>str;
    for (int i = 0; i < str.length(); i++)
    {
      
        if (!isalpha(str[i]))
        {
                             while (true) {
                             cout<<"Error!"<<endl;
                             
                             cout<<"Enter word again:";
                             
                             cin>>str;
                             if (isalpha(str[i]))
                              break;
                             }
                            return false; 
                   }
              }
cout<<"you entered:"<<endl;
cout<<str<<endl;
return true;
 
}
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
15.10.2012, 13:45 #10
У Вас не правильная организация самой программы.
можно сделать как-то так (писал в блокноте, так что не проверял на работоспособность):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int i;
string str;
 
bool isAlpha(std::string &str){
    for (int i = 0; i < str.length(); i++)  
        if (!isalpha(str[i]))
            return false; 
return true;    
}
 
void otherfunc ();
{
    do{
    cout<<"Enter word"<<endl;
    cin>>str;
    }while(!isAlpha(str));
 
    cout<<"you entered:"<<endl;
    cout<<str<<endl;
    return true;
 
}
То есть в данном случае функция isAlpha возвращает false, если введенные данные не корректны и вызывающая функция снова требует ввода данных.
У Вас же получается:
запрос данных
проход по всем символам введенной строки
{если символ с номером i не корректен, тогда запрашиваем новую строку и проверяем корректен ли теперь символ с номером i, хотя строка уже другая. А потом в любом случае return false.
1
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
15.10.2012, 15:04 #11
Я бы сделал так:
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 <iostream>
#include <algorithm>
#include <string>
#include <cctype>
using namespace std;
 
int main()
{
    string word;
    cin>>word;
    while (true)
    {
        if(all_of(word.begin(), word.end(), std::isalpha))
        {
            cout<<"You entered: "<<word<<endl<<endl;
            break;
        }
        else
        {
            cout<<"Error!!!\nEnter again: ";
            cin>>word;
        }
    }
    system("pause");
    return 0;
}
0
15.10.2012, 15:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2012, 15:04
Привет! Вот еще темы с ответами:

Аналог метода Split для std::string - C++
Как можно раздилить string? вот например строчка из сишарп string s = &quot;class Klass&quot;; string sarr = s.Split(' '); есть...

Аналог strcmp только для слов - C++
Я знаю,что strcmp сравнивает две строки,а есть ли такая команда ,чтобы сравнивала два слова в одной строке(одномерный массив)? Мне нужно...

Есть ли аналог remove_if для соседних элементов? - C++
Задача такая. Пусть есть упорядоченный набор натуральных чисел. Пример: (15, 10, 3, 9, 7, 8, 2). Наборы элементов (15, 10) (10, 3) (3,...

есть массив char. есть строка string. как присвоить значению string-a значение char-a? - C++
есть массив char. есть строка string. как присвоить значению string-a значение char-a?


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

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

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