You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除字符串中元音的C++程序未得预期输出,求问题排查

问题分析与解决

嘿,我一眼就瞅出问题所在啦——你的程序没移除元音的核心原因,是条件判断里的逻辑运算符用错了!咱们来拆解下:

错误原因

你当前的判断条件用了||(逻辑或):

if(orig[i] != 'a' || orig[i] != 'A' ||orig[i] != 'e'||orig[i] != 'E'||orig[i] != 'i'||orig[i] != 'I'|| orig[i] != 'o'||orig[i] != 'O'||orig[i] != 'u'||orig[i] != 'U')

这个逻辑完全不对!举个例子:如果当前字符是'a',那么orig[i] != 'a'是假,但orig[i] != 'A'是真——只要有一个||连接的条件为真,整个表达式就为真,所以'a'会被直接加到temp里。不管字符是不是元音,这个条件永远都会成立,自然输出的就是原字符串了。

修正方案

把所有的||换成&&(逻辑与),这样只有当字符同时不是所有元音字母的时候,才会被保留:

#include<iostream>
#include<string>
using namespace std;
int main(){
 string orig;
 string temp;
 cin >> orig;
 for(int i=0 ; i<orig.size() ; i++){
 // 把||全部替换成&&
 if(orig[i] != 'a' && orig[i] != 'A' && orig[i] != 'e' && orig[i] != 'E' && orig[i] != 'i' && orig[i] != 'I' && orig[i] != 'o' && orig[i] != 'O' && orig[i] != 'u' && orig[i] != 'U'){
 temp += orig[i];
 }
 }
 cout<<temp;
 return 0;
}

更简洁的写法(可选)

如果你觉得写一堆判断太繁琐,可以把元音字母放到一个字符串里,用string::find方法来判断,代码会清爽很多:

#include<iostream>
#include<string>
using namespace std;
int main(){
 string orig;
 string temp;
 const string vowels = "aeiouAEIOU"; // 把所有元音存到一个字符串里
 cin >> orig;
 for(char c : orig){ // 用范围for循环更直观
 if(vowels.find(c) == string::npos){ // find找不到字符时返回npos
 temp += c;
 }
 }
 cout<<temp;
 return 0;
}

这个写法的逻辑是:如果当前字符在元音字符串里找不到(也就是不是元音),就把它加到结果中,代码可读性和维护性都更好。

内容的提问来源于stack exchange,提问作者Ashish M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:38:14