我正在编写一个程序,它在没有元音的情况下给出输入字符串。但是它只给出字符串的第一个字符串。这是代码:
#include<iostream>
using namespace std;
int main(){
char ch;
while(cin.get(ch)){
cout<<ch;
char a=cin.peek();
while( a==65 || a==69 || a==73 || a==79 || a==85 || a==97 || a==101 || a==105 || a==111 || a==117)
cin.ignore(1 , a);
}
return 0;
}
答案 0 :(得分:1)
要解决这样的问题,首先要将问题分解为更小的部分。可能的分解是:
然后在代码中,您可以将其转换为:
// 1) Are there characters still to read?
while (std::cin.good())
{
// 2) Read in a character
char ch;
std::cin.get(ch);
// 3) Is the character a vowel?
// For the test for a vowel, you can use something similar to
// what you have at the moment, or better still: consider
// writing a function like isVowel in @Shreevardhan answer.
if ( /* TODO: Test if the character is a vowel... */)
{
// Skip the rest of the loop and go back to 1
continue;
}
// 4) Output the good character
std::cout << ch;
// 5) Reached the end of the loop, so goto 1
}
将问题分解成较小的部分是个好习惯。我经常开始一个新项目,首先写出一个列表/评论(甚至绘制流程图),将问题分解成更易于管理的部分。
答案 1 :(得分:0)
像这样的东西
#include <iostream>
using namespace std;
bool isVowel(char c) {
c = tolower(c);
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}
int main() {
char c;
while (cin.get(c))
if (!isVowel(c))
cout << c;
return 0;
}
在里面添加你的存储逻辑。
更多C ++ - ish代码
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
string s;
getline(cin, s);
s.erase(remove_if(s.begin(), s.end(), [](char c) {
c = tolower(c);
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}), s.end());
cout << s;
return 0;
}
查看demo。
答案 2 :(得分:0)
其他答案显示如何以更直观的方式解决此问题。 无论如何,在查看代码时请考虑以下事项:
while( a==65 || a==69 || a==73 || a==79 || a==85 || a==97 || a==101 || a==105 || a==111 || a==117)
cin.ignore(1 , a);
当您使用a
值附近的条件执行while循环时,cin.ignore(1 , a)
不会更改a
的值,除非异常,否则您不会离开此循环抛出,对吧?
答案 3 :(得分:0)
也许你可以尝试使用升级库。
#include <boost/algorithm/string.hpp>
boost::erase_all(str, "a");