我正在制作一个乱码翻译器,你输入一个单词,控制台输出乱码。乱码语言的参数是,如果单词中有任何元音,你将“ab”放在元音的前面。例如,胡言乱语中的“你好”将是“H-ab-ell-ab-o”。虽然我遇到了问题(如果您发现此代码杂乱或写得不好,请放轻松。我只是在学习)
这是我的代码:
int quit = 2;
int i;
bool vowel;
string word;
string letter = &word[int (i)];
void translation() {
cout << "Enter a word: " << endl;
cin >> word;
for (int i = 0; i <= 20; ++i) {
if (letter == "a") {
cout << "ab" << letter;
}
if (letter == "e") {
cout << "ab" << letter;
}
if (letter == "i") {
cout << "ab" << letter;
}
if (letter == "o") {
cout << "ab" << letter;
}
if (letter == "u") {
cout << "ab" << letter;
} else {
cout << letter ;
}
}
}
void again() {
cout << "Enter 1 to translate another word, Enter 0 to quit" << endl;
cin >> quit;
}
int main() {
while (quit >= 1) {
translation();
again();
}
return 0;
}
说,当它提示你输入这样的字时:
Enter a word:
你输入单词Hello,它应输出:
Enter a word:
Hello
Habellabo
Enter 1 to translate another word, Enter 0 to quit
但是我的程序输出了这个:
Enter a word:
hello
Enter 1 to translate another word, Enter 0 to quit
为什么不输出翻译的单词?
答案 0 :(得分:1)
string letter = &word[int (i)];
是一些奇怪的代码,并调用UB,因为char*
可能不会被终止。它相当于string letter = &word[0];
,您将从char
返回operator[]
的引用地址。另外,使用双引号是错误的"a"
是字符串文字。您希望将单引号与char
进行比较。
将您的代码更改为以下内容:
for (int i = 0; i < word.size(); ++i) {
if (word[i] == 'a') {
cout << "ab" << word[i];
}
if (word[i] == 'e') {
cout << "ab" << word[i];
}
if (word[i] == 'i') {
cout << "ab" << word[i];
}
if (word[i] == 'o') {
cout << "ab" << word[i];
}
if (word[i] == 'u') {
cout << "ab" << word[i];
} else {
cout << word;
}
答案 1 :(得分:1)
请改为尝试:
string letter;
...
for (int i = 0; i <= word.length(); ++i) {
letter = word[i];
if (letter == "a") {
cout << "ab" << letter;
}
...
必须在每次迭代时更新字母变量,否则它将保持为空。
另外,正如其他答案中所提到的,当你逐个遍历字符时,它将是一个更好的选择,以便char
使用letter
类型。
答案 2 :(得分:0)
string letter = &word[int (i)];
i
是全局变量,初始化为 0 。但问题是字符串word
。这是一个空字符串。 &word[0]
会为您提供\0
个字符的位置。因此,letter
被初始化为空字符串。所以,你实际上是在点击最后的else语句而没有打印任何内容,因为letter
也是空的。
答案 3 :(得分:0)
您定义string letter = &word[int (i)];
。这不符合您的想法。它在语句执行时使用i
的值。稍后更改i
不会更改letter
的值。您需要在循环内显式评估word[i]
。此外,当您真正想要进行字符比较时,比较vs "a"
,"e"
等比较字符串。尝试单引号而不是双引号,即'a'
,'e'
等