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

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

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

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

15.10.2012, 00:36. Просмотров 1191. Ответов 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;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
15.10.2012, 00:40     Есть ли аналог isalpha, только для string #2
Цитата Сообщение от letnjaja Посмотреть сообщение
Как проверить, что введены только буквы, без символов, isalpha не прокатило , тока для символов
цикл for_each и через лямбда выражение с помощью isalpha проверяете
KeyGen
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
15.10.2012, 00:40     Есть ли аналог isalpha, только для string #3
Воспользуйся регулярками. Вот статья:

Регулярные выражения в С++
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
15.10.2012, 01:09  [ТС]     Есть ли аналог isalpha, только для string #4
а как-нибудь попроще можно проверить, что слово содержить только буквы?
Kastaneda
Форумчанин
Эксперт С++
4259 / 2791 / 219
Регистрация: 12.12.2009
Сообщений: 7,120
Записей в блоге: 1
Завершенные тесты: 1
15.10.2012, 09:10     Есть ли аналог isalpha, только для string #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;
}
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
15.10.2012, 13:01  [ТС]     Есть ли аналог isalpha, только для string #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;
   
}
Croessmah
Модератор
Эксперт CЭксперт С++
12699 / 7173 / 800
Регистрация: 27.09.2012
Сообщений: 17,694
Записей в блоге: 2
Завершенные тесты: 1
15.10.2012, 13:05     Есть ли аналог isalpha, только для string #7
C++
1
2
3
4
5
while (true) {
cout<<"Error!"<<endl;
cout<<"Enter word again:";
cin>>str;                             
}
Нет выхода из цикла while
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
15.10.2012, 13:06     Есть ли аналог isalpha, только для string #8
C++
1
2
3
4
5
 while (true) {
    cout<<"Error!"<<endl;
    cout<<"Enter word again:";
    cin>>str;                             
}
А как вы думали это будет работать? Напишите какое-нибудь условие выхода из этого цикла
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
15.10.2012, 13:34  [ТС]     Есть ли аналог isalpha, только для string #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;
 
}
Croessmah
Модератор
Эксперт CЭксперт С++
12699 / 7173 / 800
Регистрация: 27.09.2012
Сообщений: 17,694
Записей в блоге: 2
Завершенные тесты: 1
15.10.2012, 13:45     Есть ли аналог isalpha, только для string #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.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2012, 15:04     Есть ли аналог isalpha, только для string
Еще ссылки по теме:

C++ Определить виды блюд, которые есть только на завтраке, только на обеде и только на ужине
C++ Аналог strcpy, memmove но только для бинарних файловых типов fstream
C++ Есть ли аналог LOADBMP только для видео файлов в С++?
Есть ли аналог remove_if для соседних элементов? C++
C++ Аналог strcmp только для слов

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

Или воспользуйтесь поиском по форуму:
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
15.10.2012, 15:04     Есть ли аналог isalpha, только для string #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;
}
Yandex
Объявления
15.10.2012, 15:04     Есть ли аналог isalpha, только для string
Ответ Создать тему
Опции темы

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