用C语言写出以下代码,假设称正读和反读都相同的字符序列为“回文”,例如:abba’ 和'abcba是回文,而'abcde和'ababab'则不是回文。试写一个算 法判别读入的一个以‘@为结束符的字符序列是否是“回文”。
时间: 2024-11-18 22:27:42 浏览: 5
回文数是指正读和反读都相同的数.docx
在C语言中,我们可以创建一个简单的函数来判断输入的字符序列是否是回文。首先,我们需要将输入的字符序列存储在一个字符数组中,并忽略 '@' 结束符。然后,我们将数组的前半部分与后半部分逐个比较,如果所有元素匹配,则该序列是回文。
下面是一个简单的实现:
```c
#include <stdio.h>
#include <string.h>
// 检查是否为回文
int is_palindrome(char *str) {
int len = strlen(str);
if (len <= 1 || str[len - 1] != '@') { // 如果字符串长度小于等于1,或者不是以'@'结尾,不是回文
return 0;
}
int left = 0;
int right = len - 2; // 右边界从倒数第二个字符开始,因为最后一个字符已排除在外
while (left < right) {
if (str[left++] != str[right--]) { // 如果左右两边的字符不相等,返回false
return 0;
}
}
return 1; // 所有字符匹配,所以是回文
}
int main() {
char input[100];
printf("请输入一个回文序列(以 @ 结束):");
fgets(input, sizeof(input), stdin); // 读取用户输入
input[strcspn(input, "\n")] = '\0'; // 移除换行符
if (is_palindrome(input)) {
printf("%s 是回文。\n", input);
} else {
printf("%s 不是回文。\n", input);
}
return 0;
}
阅读全文