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

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

Войти
Регистрация
Восстановить пароль
 
Chernobyl
212 / 212 / 67
Регистрация: 30.09.2012
Сообщений: 542
#1

Неполадки с isalpha - C++

25.08.2013, 20:36. Просмотров 671. Ответов 11
Метки нет (Все метки)

Ниже я привел код самой функции.
Суть в том, что я хочу открыть файл и прочитать с него только цифры,английские буквы,разделители и знаки пунктуации.То есть если символ являеться таковым, он заноситься в вектор и будет в дальнейшем использован.

Например в файле лежит дальнейшее - rjnjhst jcyjdfkb vtnfk? - все хорошо, но если там лежит строка вида «njkcnjt», то всё,прога вылетает с ошибками, что что-то больше равно -1 и меньше ровно 255 и всё.Если убрать проверку(тот if, то всё норм и там и там) То есть,как я сейчас понимаю, isalpha не ладит с символом « , из-за чего всё летит. Но я то и хочу использовать isalph'у для того,чтобы эти и подобные символы туда не попадали.

Если переписать код как в варианте 2,то всё уже норм,но теперь просто мучает вопрос - почему в первом варианте всё улетает?

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
    void read_from_file(){ //вариант 1
    
    ifstream open("ofile.txt");  
    string word;
    while(getline(open,word)){ 
        for(int i=0;i<word.size();i++){
            if( isalpha(word[i]) || isdigit(word[i]) || isspace(word[i]) || isprint(word[i]))
            text.push_back(word[i]);
        }
                for(int i=0;i<text.size();i++) 
            cout<<text[i]; }
        }
 
 
    void read_from_file(){//вариант второй,выкололи те символы
    
    ifstream open("ofile.txt");
    string word;
    while(getline(open,word)){ 
        for(int i=0;i<word.size();i++){
            if(word[i]!='«' && word[i]!='»'){ //вот эта строка новая
            if( isalpha(word[i]) || isdigit(word[i]) || isspace(word[i]) || isprint(word[i]))
            text.push_back(word[i]);
            }
        }
 
        }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2013, 20:36     Неполадки с isalpha
Посмотрите здесь:

isalpha и isprint - C++
Какие символы в них входят. Если можно перечислите!!! Заранее спасибо!!!

Задача: функция isalpha () - C++
нужна помощь: проверить, если символ - латинский, то вернуть сиивол, преобразованный в верхний регистр, иначе тот же самый символ. нужно...

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

Isalpha;isdigit неверное употребление функций? - C++
Программа выводит сначала цифры,затем буквы,затем ост.символы исходной строки. Не могу разобраться,что не так:(( help #include...

Есть ли аналог isalpha, только для string - C++
Добрый вечер! Как проверить, что введены только буквы, без символов, isalpha не прокатило:curtsy: , тока для символов cout&lt;&lt;&quot;enter a...

Найти с помощью функции isalpha слова с дефисом - C++
Доброго времени суток. Имеется ф-ция isalpha: bool isalpha_rus(char c) { return c &gt;= 'а' &amp;&amp; c &lt;= 'я' || c &gt;= 'А' &amp;&amp; c &lt;= 'Я' || c...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 20:39     Неполадки с isalpha #2
Вот так попробуйте:
C++
1
isalpha((unsigned char)word[i])
Chernobyl
212 / 212 / 67
Регистрация: 30.09.2012
Сообщений: 542
25.08.2013, 20:45  [ТС]     Неполадки с isalpha #3
alsav22, Если в первый вариант вставить Вашу строку всё хорошо, тот символ не заноситься в вектор,а соотвественно не выводиться на печать, и это хорошо,но в почему так? Насколько знаю, unsigned char больше
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 20:52     Неполадки с isalpha #4
что такое "text" в программе?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 20:53     Неполадки с isalpha #5
Цитата Сообщение от Chernobyl Посмотреть сообщение
но в почему так?
Код символа больше 127 (такое же с русскими символами бывает), а char у вас (как, впрочем, и у меня, но не у всех) знаковый. В результате преобразований получается очень большое число, отсюда вылет.
Chernobyl
212 / 212 / 67
Регистрация: 30.09.2012
Сообщений: 542
25.08.2013, 21:02  [ТС]     Неполадки с isalpha #6
Nekto, Оууу,сам только что заметил,что не скопировал толково, это вектор состоящий из char. Прошу прощения.

Добавлено через 7 минут
alsav22, Благодарю, может еще сможете сказать. Я хочу, чтобы если в файле был введен энтер(то есть есть символ перехода на новую строку), то и вывести на печать тоже с энтером, а не всё в одну строку. Но как считать символ энтера,то есть понять,что в файле есть энтер.
С гугла узнал, что это и /n и /p,но как-то не выходит у меня их выследить.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 21:04     Неполадки с isalpha #7
...
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
25.08.2013, 21:10     Неполадки с isalpha #8
http://www.cplusplus.com/reference/cctype/
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 21:12     Неполадки с isalpha #9
Цитата Сообщение от Chernobyl Посмотреть сообщение
Я хочу, чтобы если в файле был введен энтер(то есть есть символ перехода на новую строку), то и вывести на печать тоже с энтером, а не всё в одну строку.
getline() читает до '\n' (или до конца файла), извлекает '\n' и отбрасывает. Можно самому добавлять в считанную строку '\n'.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 21:21     Неполадки с isalpha #10
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
#include <iostream>
#include <fstream>
#include <string>
 
std::string text;
void ReadFromFile()
  {
  std::ifstream file("ofile.txt");  
  char ch;
  while(file.good())
    {
    ch=file.get();
    if ( (ch>=32 && ch<127) || (ch>=9 && ch<=13) )
        text.push_back(ch);
    }
  }
 
int main()
  {
  ReadFromFile();
  for(size_t i=0;i<text.size();++i) 
    std::cout<<text[i]; 
  system("pause");
  return 0;
  }
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 21:22     Неполадки с isalpha #11
Цитата Сообщение от Chernobyl Посмотреть сообщение
Я хочу, чтобы если в файле был введен энтер(то есть есть символ перехода на новую строку), то и вывести на печать тоже с энтером, а не всё в одну строку.
После выхода из цикла, в котором добавляются символы в вектор, добавить в него '\n':
C++
1
text.push_back('\n');
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 21:42     Неполадки с isalpha
Еще ссылки по теме:

Удалить все символы в строке, не являющиеся буквами, используя функцию isalpha - C++
На Borland c\c++ .Спасибо

Неполадки с cin - C++
Доброго времени суток! Возникла небольшая проблемка с cin, самого процесса ввода просто не происходит. При отладке просто прохожу это...

неполадки в работе - C++
Доброго времени суток . Начну с самого начала . Моё железо состояло из : мать ABIT IS 7 , intel 4 3.00 память 2Gb видеокарта стояла старая...

Неполадки с кодом/Массивы - C++
Не работает программа, выбивает ошибку. #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; int...

Графика, неполадки с заливкой - C++
Примитивная программа. Но почему то внутренность круга становится цвета фона, а не цвета окружности. #include &lt;cstdlib&gt; #include...


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

Или воспользуйтесь поиском по форуму:
Chernobyl
212 / 212 / 67
Регистрация: 30.09.2012
Сообщений: 542
25.08.2013, 21:42  [ТС]     Неполадки с isalpha #12
alsav22, Да, работает,огромное спасибо! Теперь я немного лучше познал эту функцию и сам принцип действия кода.

Добавлено через 5 минут
Nekto, Не могу не выразить Вам также величайшую благодарность за Ваш труд. Особенно когда увидел, что Вы отредактировали свой изначальный код специально для энтеров.
Также большое спасибо!
Yandex
Объявления
25.08.2013, 21:42     Неполадки с isalpha
Ответ Создать тему
Опции темы

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