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

Как распознать цифру или пробел в string? - C++

Восстановить пароль Регистрация
 
Laicus
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 29
30.05.2013, 19:46     Как распознать цифру или пробел в string? #1
Дана задача:
/* Результаты вступительных экзаменов представлены в виде списка из N строк,
* в каждой строке которого записаны фамилия студента и отметки по каждому из М экзаменов.
* Определить количество абитуриентов, сдавших вступительные экзамены только на "отлично". */
Обязательно реализовать через string.
К примеру, строка "Ivanov 5 4 3 5 4".
Перебрать оценки, и если они все равны 5, то ++ к счетчику.
Вопрос другой. В char есть isdigit() к примеру, а для string не нашел. // Главный вопрос.
И в char можно свободно перебирать элементы через str[i].
Зато тут, как я понял, можно сделать массив string[intnum] для каждого студента.
Хотя как объявить число студентов до запроса Разве что объявить заранее #define maxstud 40.
Зашел сюда и ничего не понял, ибо знаю английский на уровне "My name is ...".
Нашел также решение этой задачи на Pascal. (Pascal не знаю.)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
30.05.2013, 19:47     Как распознать цифру или пробел в string? #2
isdigit
isspace
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
30.05.2013, 19:47     Как распознать цифру или пробел в string? #3
cctype

isspace
isdigit**
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
30.05.2013, 19:48     Как распознать цифру или пробел в string? #4
А лучше воспользуйтесь строковым потоком std::stringstream

Добавлено через 45 секунд
Цитата Сообщение от Laicus Посмотреть сообщение
Хотя как объявить число студентов до запроса
std::vector
Laicus
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 29
01.06.2013, 11:22  [ТС]     Как распознать цифру или пробел в string? #5
Первое: Как распознать цифру или пробел в string?
Прошу помощи.
Знаю C++ не очень (STL не знаю).
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
34
/* Результаты вступительных экзаменов представлены в виде списка из N строк, 
 * в каждой строке которого записаны фамилия студента и отметки по каждому из М экзаменов. 
 * Определить количество абитуриентов, сдавших вступительные экзамены только на "отлично". */
 
 #include <iostream>
 #include <conio.h>
 #include <string>
 #include <cstdio>
 #include <sstream>
 #include <ctype.h>
 
 using namespace std;
 
 
 int main() {
     string abit;
     int n, m = 0, i, j, size;
     cout << "Vvedite kol-vo studentov\n";
     cin >> n;
     for (i = 0; i < n; i++) {
         cout << "Vvedite familiyu i ocenki vida Ivanov 5 4 3 5\n";
         getline(cin, abit); // Принимаем строку
         size = abit.size(); // Ее длина
         for (j = 0; j < size; j++) { // Пока строка не кончится
            if (isdigit(abit[j])) {
                if (abit[j] == 5) m++;
            }
         
         }
     }
     cout << m;
     getch();
     return 0;
 }
Код - Г, но уже замаялся. Не пойму где же ошибка.
P.S. обязательно организовать через string.
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
01.06.2013, 12:25     Как распознать цифру или пробел в string? #6
Что-то вы вообще не то делаете. Во-первых,
C++
1
if (abit[j] == 5) m++;
Вы не сверяете символ с числом 5. Вы сверяете его с 5м символом таблицы ASCII - символом запроса.
Далее. Даже, допустим, вы поменяли 5 на '5'. Вы, получается, просто считаете количество пятерок.
Далее.
C++
1
cin >> n;
C++
1
getline(cin, abit);
Первая строка считывает число, но оставляет символ перехода на новую строку. В итоге, getline не предоставляет вам возможности ввести новую строку, а считывает оставшийся символ.

Добавлено через 15 минут
Для реализации задачи на текущем уровне сойдет такой код. Впрочем, он не очень красив и логичен (char tmp для заглатывания пустого символа не есть красивый способ), плюс заглатывается первый символ строки abit (тут это не принципиально, но дебагом ловится).
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
34
35
36
37
38
39
 #include <iostream>
 #include <conio.h>
 #include <string>
 #include <cstdio>
 #include <sstream>
 #include <ctype.h>
 
 using namespace std;
 
 
 int main() {
     string abit;
     int n, m = 0, i, j, stud = 0;
     char tmp;
     cout << "Vvedite kol-vo studentov\n";
     cin >> n;
     cout << "Vvedite kol-vo ekzamenov\n";
     cin >> m;
     for (i = 0; i < n; i++) {
         cout << "Vvedite familiyu i ocenki vida Ivanov 5 4 3 5\n";
         cin >> tmp;
         getline(cin,abit); // Принимаем строку
         int count = 0;
         for (j = 0; j < abit.size(); j++)
         {
            if (abit.at(j) >= '0' && abit.at(j) <= '9')
            {
                if (abit.at(j) == '5')
                {
                    count++;
                }
            }
         }
         if(count == m) stud++;
     }
     cout << stud << endl;
     system("pause");
     return 0;
 }
Yandex
Объявления
01.06.2013, 12:25     Как распознать цифру или пробел в string?
Ответ Создать тему
Опции темы

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