【发布时间】:2013-03-28 04:07:31
【问题描述】:
我对 C 语言还很陌生,但遇到了一些问题。我必须编写一个程序来接受用户输入并确定输入是否是回文。我有程序来反转输入,但我无法让字符串进行比较。所有输入都不是回文。我想使用整数下标索引来比较输入。另外我想忽略所有非字母字符,我认为这是一个 c.type 函数。
#include <stdio.h>
#include <string.h>
#define N 50
main()
{
char array[N] = {0};
char front;
char end;
char x;
char w =0;
char i;
char forward;
char reverse;
printf("Enter Message: ");
gets(array);
front = sizeof(array);
end = sizeof(array) - 1;
for( i = 0; i <= front; i++){
forward = array[i];
}
for( x = end; x >= 0; x--){
reverse = array[x];
}
if (forward != reverse){
w = 1;
}
if(w == 1){
printf("Not a Palindrome");
}
else{
printf("Palindrome");
}
printf("\n");
return 0;
}
【问题讨论】:
-
你想使用 strlen 而不是 sizeof
-
你做错了。您只比较字符串的第一个字符。您将需要比较所有字符。同样
sizeof返回类型的大小,使用strlen。提示:使用另一个循环。 -
使用strrev和strcmp算作弊吗?
-
不要使用gets()。永远。
-
@user2023041,
gets根本没有溢出保护。取自 cppreference 文档:gets() 函数不执行边界检查,因此该函数极易受到缓冲区溢出攻击。它不能安全使用(除非程序在限制标准输入上出现的内容的环境中运行)。出于这个原因,该功能在 C99 标准的第三次勘误中已被弃用,并在 C11 标准中完全删除。 fgets() 和 gets_s() 是推荐的替代品。
标签: c palindrome