转换器输出问题
Translator Output Problems
我正在制作一个胡言乱语翻译器,您可以在其中输入一个单词,控制台以胡言乱语输出该单词。胡言乱语的参数是,如果单词中有元音,你就在元音前面加上"ab"。例如,胡言乱语中的"Hello"就是"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
为什么它不输出翻译的单词?
string letter = &word[int (i)];
是一些奇怪的代码,它调用UB是因为char*
可能不是以null结尾的。它相当于string letter = &word[0];
,并且您正在获取从operator[]
返回的对char
的引用的地址。此外,使用双引号是错误的"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;
}
试试这个:
string letter;
...
for (int i = 0; i <= word.length(); ++i) {
letter = word[i];
if (letter == "a") {
cout << "ab" << letter;
}
...
letter变量必须在每次迭代时更新,否则它将保持为空。此外,正如其他答案中所提到的,在逐个迭代字符时,使用char
类型作为letter
将是一个更好的选择。
string letter = &word[int (i)];
i
是全局变量,并初始化为0。但问题出在字符串word
上。它是一个空字符串。&word[0]
为您提供