.假设称正读和反读都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是回文,‘abcde’和‘ababab’则不是回文。试写一个算法判别读入的一个以‘@’为结束符的字符序列是否是“回文”。(C语言)
时间: 2024-12-16 22:18:20 浏览: 12
这是一个经典的字符串判断问题,可以使用双指针技巧来解决。下面是一个简单的C语言函数,它接受一个以 '@' 结束的字符序列作为输入,并返回一个布尔值,表示该序列是否是回文。
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool isPalindrome(char str[]) {
int left = 0;
int right = strlen(str) - 1;
while (left < right) {
if (str[left] != str[right]) {
return false; // 如果左右两侧的字符不相等,则非回文
}
left++;
right--;
}
return true; // 如果所有字符都一一对应相等,则是回文
}
int main() {
char input[100];
fgets(input, sizeof(input), stdin);
// 移除 '\n' 字符
input[strlen(input) - 1] = '\0';
if (isPalindrome(input)) {
printf("'%s' is a palindrome.\n", input);
} else {
printf("'%s' is not a palindrome.\n", input);
}
return 0;
}
```
此程序首先检查两个指向序列两端的指针,如果它们指向的字符不相等,就立即返回false;当两个指针相遇时,说明整个序列都是回文,返回true。注意,我们还需要处理用户输入以移除换行符。
阅读全文