gpt4 book ai didi

c++ - 在 C++ 中显示不需要的数字

转载 作者:行者123 更新时间:2023-11-28 01:16:36 26 4
gpt4 key购买 nike

好吧,我一直在用 C++ 做一个学校项目。我必须输入我的名字,当我输入时,我输入的字母将被转换为整数。字母相应地具有从 1 到 26 的相应数字,对应于 a 到 z。所以我想也许我可以使用这个:

int main(int argc, char** argv) {

char lowletters[26] = {'a', 'b', 'c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char upletters[26] = {'A', 'B', 'C', 'D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char fname[50], lname[50];
int corrNums[26] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26};

cout << "Enter name: ";
cin >> fname >> lname;

for(int a = 0; a <= sizeof(fname)-1; a++){
for(int b = 0; b < 26; b++){
if(fname[a] == lowletters[b]){
cout<<corrNums[b]<<"\t";
}
if(fname[a] == upletters[b]){
cout<<corrNums[b]<<"\t";
}
}
}

for(int a = 0; a <= sizeof(lname)-1; a++){
for(int b = 0; b < 26; b++){
if(lname[a] == lowletters[b]){
cout<<corrNums[b]<<"\t";
}
if(lname[a] == upletters[b]){
cout<<corrNums[b]<<"\t";
}
}
}

return 0;
}

所以我使用第一个循环从 fname 中获取字符并将其与小写和大写字母进行比较以找出它是什么字母。当它这样做时,它会在 for 循环中显示 corrNums(corresponding numbers) 和 b 的值,以便它匹配。

我运行它,乍一看我认为它显示正确。确实如此,但如果您注意到名字和姓氏的末尾,就会有这些数字。看一看:

enter image description here

最佳答案

问题是您使用了 sizeof(fname)sizeof(lname)(-1 在这里不是特别重要)。 sizeof()是与输入长度无关的编译时常量。

这是一个问题,因为您未初始化的数组中有一些东西与您的 upletterslowletters 数组匹配。由于您检查了整个数组,因此您的程序也会打印它。

解决方案是只检查数组中已估算的部分。你可以用 strlen() 来做到这一点:

for(int a = 0; a < strlen(fname); a++){
//...
}
//...
for(int a = 0; a < strlen(lname); a++){
// ...
}

当然,如果你被允许使用std::string (许多 C++ 类没有),这要容易得多:

std::string fname, lname;
//...
for(int a = 0; a < fname.size(); a++){
//...
}
//...
for(int a = 0; a < lname.size(); a++){
// ...
}

这通常是首选,因为您不会以这种方式溢出缓冲区,但您可以做您想做的事/教授希望您做的事。

关于c++ - 在 C++ 中显示不需要的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58496003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com