Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
1

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

15.10.2012, 00:36. Просмотров 1518. Ответов 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 и нужно проверять записан ли внутри текст или число. Какими...

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

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

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

Аналог trim() для std::string
Не подскажите аналог trim() для std::string в std? Нужно убрать лишние пробелы...

10
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
15.10.2012, 00:40 2
Цитата Сообщение от letnjaja Посмотреть сообщение
Как проверить, что введены только буквы, без символов, isalpha не прокатило , тока для символов
цикл for_each и через лямбда выражение с помощью isalpha проверяете
0
KeyGen
384 / 291 / 21
Регистрация: 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
Эксперт С++
4939 / 3015 / 346
Регистрация: 12.12.2009
Сообщений: 7,612
Записей в блоге: 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
++Ͻ
14624 / 8374 / 1580
Регистрация: 27.09.2012
Сообщений: 20,573
Записей в блоге: 2
Завершенные тесты: 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 / 34
Регистрация: 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
++Ͻ
14624 / 8374 / 1580
Регистрация: 27.09.2012
Сообщений: 20,573
Записей в блоге: 2
Завершенные тесты: 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
1442 / 779 / 257
Регистрация: 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

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

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

Аналог метода Split для std::string
Как можно раздилить string? вот например строчка из сишарп string s =...


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

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

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