Проблема заключается в том, чтобы найти все гласные все четные слова в общем количестве предложений, другими словами, эти гласные должны выполняться любым четным словом в предложении. Но я, когда я вхожу, например: «ewedyua aiuye dswidje ieuayj eeee eeeui dajhdfjcne aodijsbfe». я получаю: EIU , но «е», как ожидается, в качестве последнего слова даже не содержит «и» (я использую «» только для разделения здесь в тексте и не использовать их в выводе)отладка программы на C++ с помощью <set> контейнеров
Программа:
int main(){
string str;
char ch = ' ';
set<char> strSet;
set<char> resultSet;
set<char> tempSet;
int count = 1;
int i = 0;
cout << "Enter a line: ";
getline(cin, str);
str = delOverSpace(str); // delete excessive gaps<br>
do {
ch = str.at(i);
if(((count % 2) == 0) && (ch != ' ')){ // this is an even word and not a gap
if(isVowel(upperToLower(ch))) // this is a vowel
tempSet.insert(upperToLower(ch));
}
if (ch == ' ') { // if we've passed through the word add inforamtion on it
if(((count % 2) == 0) && (count/2) == 1)
strSet.insert(tempSet.begin(), tempSet.end());
else if (((count % 2) == 0) && (count/2) != 1){
set_intersection(
strSet.begin(),strSet.end(), tempSet.begin(), tempSet.end(),
insert_iterator<set<char> >(resultSet, resultSet.begin())
);
strSet.clear();
tempSet.clear();
strSet.insert(resultSet.begin(), resultSet.end());
resultSet.clear();
}
count++;
}
i++;
}while(ch != '.');
if (count == 2) cout << "Only one word was entered" << endl;
else if (strSet.empty()) cout << "No vowels were found" << endl;
else {
copy(strSet.begin(), strSet.end(), ostream_iterator<char>(cout, " "));
cout << endl;
}
return 0;
}
Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить [Минимальный, Полный и Подтверждаемый] (http: // stackoverflow.com/help/mcve) пример, который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчике. –
При переходе кода в отладчик обычно помогает помещать отдельные инструкции в отдельные строки, в противном случае отладчик может переходить на операторы, которые фактически выполняются. Я говорю о ваших строках 'if (...) cout << ...'. Это не так плохо, так как вы увидите результат, но если эти однострочные элементы не содержат вывода, отлаживать его гораздо сложнее. Эти строки не ошибаются, они просто делают процесс отладки немного сложнее. –
Я вижу, спасибо за помощь. – Neyroman