#c
#c
Вопрос:
Я пишу программу для класса, и пока у меня счетчик слов работает нормально, а гласная часть работает нормально, но согласные и не альфа-цифры возвращают неправильные ответы на 1 (в некоторых случаях). я думаю, что проблема заключается в тестировании самих персонажей, но, похоже, я не могу найти способ обойти это.
using namespace std;
int main()
{
char ch;
int count = 0;
int vowel = 0;
int cons = 0;
int noalph = 0;
bool inword = 1;
bool space = 0;
while (cin.get(ch)) {
if (ch != ' ') {
inword = 1;
}
if (isspace(ch)) {
space = 1;
}
else if (space amp;amp; inword) {
count ;
space = 0;
inword = 0;
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ||
ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U' ||
ch == 'y' || ch == 'Y') {
vowel ;
}
if (ch != 'a' amp;amp; ch != 'e' amp;amp; ch != 'i' amp;amp; ch != 'o' amp;amp; ch != 'u' amp;amp;
ch != 'A' amp;amp; ch != 'E' amp;amp; ch != 'I' amp;amp; ch != 'O' amp;amp; ch != 'U' amp;amp;
ch != 'y' amp;amp; ch != 'Y'
amp;amp; isalpha(ch)) {
cons ;
}
if (ispunct(ch) || isdigit(ch)) {
noalph ;
}
}
}
if (count > 0) {
count ;
}
//--------------------------------------------
cout << "Total Number of Words = " << count << endl;
cout << "Number of Words Beginning with a Vowel = " << vowel << endl;
cout << "Number of Words Beginning with a Consonant = " << cons << endl;
cout << "Number of Words Beginning with a Non-Alpha = " << noalph << endl;
return 0;
}
Пример 1 (
Ввод:———————————————————————
supercalifragilisticexpialidocious Бессмысленное слово, используемое, особенно, детьми, теперь в основном выражающее восторженное одобрение: фантастический, замечательный. Стал популярным благодаря фильму Уолта Диснея «Мэри Поппинс» в 1964 году. Песня, содержащая слово, была предметом иска о нарушении авторских прав, возбужденного в 1965 году против создателей фильма компанией Life Music Co. и двух авторов песен: cf. quots. 1949, 1951. Ввиду более раннего устного использования слова, приведенного к присяге под присягой, и различий между песнями судья вынес решение против истцов.
Взято из OED.
Вывод:———————————————————————
Общее количество слов = 86
Количество слов, начинающихся с гласной = 25
Количество слов, начинающихся с согласной = 55
Количество слов, начинающихся с не-Альфа = 5
Ожидаемый:——————————————————————
Общее количество слов = 86
Количество слов, начинающихся с гласной = 25
Количество слов, начинающихся с согласной = 56
Количество слов, начинающихся с не-Альфа = 5
)
Пример 2 (ввод:———————————————————————
1996 бутылка 12345 радар Toyota Мадам, я Адам, я видел крысу? Норма такая же самоотверженная, как и я, Рон. Человек, план, канал — Панама! Тарзан вырастил крысу Дези Арназ. Ханна, я жил непристойно, и зло, которое я делал. Выдержки из «Дзен программирования» Мэри сказала: «Мне нравится STL».
Вывод:———————————————————————
Общее количество слов = 56
Количество слов, начинающихся с гласной = 20
Количество слов, начинающихся с согласной = 31
Количество слов, начинающихся с не-Альфа = 4
Ожидаемый:——————————————————————
Общее количество слов = 56
Количество слов, начинающихся с гласной = 20
Количество слов, начинающихся с согласной = 31
Количество слов, начинающихся с не-Альфа = 5
)
Как вы можете видеть, он ломается в разных точках, может быть, это что-то простое, может быть, это не так, я просто хотел бы получить помощь в понимании того, что происходит, спасибо!
Комментарии:
1. Вы пробовали (намного, намного) меньшие вещи? Как насчет просто «cat» или «angry cat» и подобных, чтобы посмотреть, станет ли это более очевидным. Постарайтесь сделать ввод намного меньше
2. нет, но, но не забывайте, что входные данные установлены и не могут быть изменены, поэтому я должен написать для этих входных данных @Tas
3. При отладке лучше начать с небольшого примера.
4. Я буквально погуглил
Y
, считается ли это гласной или нет? Я никогда не знал. Но в вашем случае вы рассматриваете это исключительно как гласную.5. на самом деле, поскольку эта программа проверяет только гласные первого символа, а y всегда является гласной, если это первый символ, так что да, в моем случае это всегда гласная, эта программа проверяет только гласные и другие элементы в начале слова и нигде больше. @aep
Ответ №1:
Хорошо, вы не следовали советам в комментариях, поэтому давайте сделаем это явно. Вы пропускаете первое слово. Причина инициализации в этой строке:
bool space = 0;
вы должны инициализировать его как true
bool space = true;
(да, используйте true
и false
для логического значения).
вы должны увидеть, что причина, по которой вы добавили эти строки
if (count > 0) {
count ;
}
чтобы решить эту проблему. Итак, удалите их.
Вы также пропустили #include <iostream>
директиву.
Комментарии:
1. хорошо, я просто запустил код, он сработал! но я пробовал меньшие входные данные прямо перед сном, чтобы попытаться изолировать ошибку, но я ничего не видел на меньших выходных данных, может быть, я просто устал. Но спасибо за помощь. @все