【发布时间】:2019-06-25 09:37:21
【问题描述】:
我正在尝试获取字符串的所有元音,并按照它们出现的顺序将它们复制到不同的字符串中。字符串只能是一个单词(没有空格)和小写英文字母。
示例:如果我输入“informatics”,我希望输出“oai”。
当我运行编译器时,我在 cmd 框中得到一个 std::out of range 错误
这是我的代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s, s2;
int i, j;
char c;
cout << "Introduceti sirul de caractere: "; cin>>s;
j=0;
for(i=0; i<s.length(); i++)
switch(s.at(i))
{
case 97: {j++; c=97; s2.at(j)=c;}
case 101: {j++; c=101; s2.at(j)=c;}
case 105: {j++; c=105; s2.at(j)=c;}
case 111: {j++; c-111; s2.at(j)=c;}
case 117: {j++; c=117; s2.at(j)=c;}
}
cout<<s2;
return 0;
}
我假设问题在于在第二个字符串中复制元音本身,那么它通常是如何完成的呢?例如,我不能只拥有一个 s2.at(j)=a,因为它会说变量 a 没有被声明(当然),但我也假设我不能只说它等于元音的 ASCII 码,或者我可以吗?我什至不知道。所以我尝试当场更改具有该元音的变量,然后将其放入字符串中,但出现错误。
【问题讨论】:
-
我认为您在
switch声明中缺少breaks -
请澄清:鉴于“快速棕色狐狸”的预期输出是什么?
-
您从未正确分配您的
s2字符串,因此您无法复制/替换那里的任何内容。同样正如@ForceBru 提到的,缺少break;语句。 -
97和其他神奇数字是什么意思?我猜你的意思是'a'。 -
强烈建议使用字符
'a'而不是原始 ASCII 码。 1) 对于普通读者来说,推断'a'的意图要比97容易得多。 2)更容易发现错误,比如不小心使用了错误的代码。 3) 目标系统可能是少数不使用 ASCII 的系统之一。