给出一个长度不超过1000的字符串,判断它是不是回文(顺读,逆读均相同)的。 输入描述 输入包括一行字符串,其长度不超过1000。 输出描述 可能有多组测试数据,对于每组数据,如果是回文字符串则输出"Yes!”,否则输出"No!"。
时间: 2024-12-30 11:40:11 浏览: 5
为了判断一个字符串是否为回文,我们可以采用双指针的方法,从字符串两端同时开始向中间移动,比较对应位置的字符是否相等。以下是使用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[1001];
fgets(input, sizeof(input), stdin); // 从标准输入获取字符串,忽略换行符
input[strcspn(input, "\n")] = '\0'; // 删除多余的换行符
if (isPalindrome(input)) {
printf("Yes!\n");
} else {
printf("No!\n");
}
return 0;
}
```
这段代码首先初始化两个指针`left`和`right`,分别指向字符串的首尾。在while循环中,只要左右指针所指的字符不相等,就立即返回false,表示不是回文。当两个指针相遇时,说明整个字符串都是回文,返回true。
在`main`函数中,我们从用户输入读取字符串,并使用`fgets`处理可能存在的换行符,然后调用`isPalindrome`函数判断是否为回文,并根据结果输出相应的消息。
阅读全文