循环数组问题求解
这样运行系统报错了,应怎么改{:5_100:}题目:编写一个程序,输入一个字符串,输出其中每个字符在字母表中的序号。对于不是英文字时的字符,输出 0。例如:输入为”acbf8g”,输出为 1 3 2 6 0 7
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
char str;
cin.getline(str, 10, '\n');
for (int i = 0; str != '\n'; i++)
{
if (isdigit(str))
cout << " " << "0";
else if (isalpha(str))
cout << " " << str - 'a' + 1 ;
}
return 0;
}
Thanks♪(・ω・)ノ 问题出在循环的条件判断上。在这段代码中,使用了 cin.getline() 函数来获取输入的字符串,但是它不会将换行符 \n 包含在内。所以在循环条件判断 str[ i] != '\n' 中,永远都无法满足条件,导致循环无法结束,最终导致系统报错。
解决这个问题,可以将循环条件改为判断字符串是否结束,即判断 str[ i] != '\0' 。 \0 是字符串的结束符,表示字符串的结尾。
改正后的代码如下所示:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
char str;
cin.getline(str, 10, '\n');
for (int i = 0; str[ i] != '\0'; i++)
{
if (isdigit(str[ i]))
cout << " " << "0";
else if (isalpha(str[ i]))
cout << " " << str[ i] - 'a' + 1 ;
}
return 0;
}
这样修改后,循环会在字符串结束时结束,不会再出现报错的情况。 楼下方法是对的 #include <ctype.h>
int main() {
char str;
int i;
printf("请输入一个字符串:");
scanf("%s", str);
printf("每个字符在字母表中的序号为:");
for(i = 0; str != '\0'; i++) {
if(isalpha(str)) {
if(isupper(str)) {
printf("%d ", toupper(str) - 'A' + 1);
} else {
printf("%d ", tolower(str) - 'a' + 1);
}
} else {
printf("0 ");
}
}
return 0;
} cjgank 发表于 2023-10-24 10:50
楼下方法是对的
是楼上吧嘿嘿嘿 六翻了 发表于 2023-10-24 19:28
Thanks♪(・ω・)ノ我们班其他两个同学也是这么做的 lebaaa 发表于 2023-10-25 11:23
Thanks♪(・ω・)ノ我们班其他两个同学也是这么做的
条条大路通罗马 六翻了 发表于 2023-10-25 11:43
条条大路通罗马
是的!可以去看看我的新帖吗{:10_254:}差一点点就能到罗马了 lebaaa 发表于 2023-10-25 11:22
是楼上吧嘿嘿嘿
{:5_109:}对。打错字了,楼上
页:
[1]