在C语言中,我们可以利用基本的字符串处理功能来实现对一个字符串是否为回文串的判断。回文串是指正向读和反向读都相同的字符串。下面是一段使用C语言编写的代码,用于判断用户输入的字符串是否为回文串。
#include <stdio.h> #include <string.h> #include <stdbool.h> // 引入布尔类型支持 int main() { // 回文串判断部分 char str[20]; // 声明一个大小为20的字符数组存储用户输入的字符串 fgets(str, sizeof(str), stdin); // 使用fgets函数安全地读取用户输入(避免gets带来的缓冲区溢出问题) int len = strlen(str); // 获取字符串长度 if (str[len - 1] == '\n') { // 检查字符串末尾是否包含换行符 str[len - 1] = '\0'; // 将换行符替换为字符串结束符 len--; // 调整字符串有效长度 } bool flag = true; // 初始化标志变量,表示当前字符串可能是回文串 int left = 0, right = len - 1; // 分别设置左右指针,初始指向字符串两端 while (left < right) { // 当左指针小于右指针时继续循环 printf("%c %c \n", str[left], str[right]); // 打印当前比较的两个字符以观察比较过程 if (str[left] != str[right]) { // 若两个字符不相等 flag = false; // 设置标志变量为false,表示该字符串不是回文串 break; // 结束循环 } left++; // 左指针向右移动一位 right--; // 右指针向左移动一位 } puts(flag ? "是回文串" : "不是回文串"); // 根据标志变量输出判断结果 // 程序正常结束,返回0 return 0; }
这段程序首先通过fgets
函数获取用户的输入,并确保字符串末尾没有换行符影响判断。然后,它创建了两个指针left
和right
分别指向字符串的开始和结束位置,并通过循环逐步将它们向中间靠拢,同时对比两边的字符是否相等。当发现不相等的字符时,立即跳出循环并设置标志变量为false。最后,根据标志变量的值输出判断结果。整个过程简洁高效,实现了对回文串的准确判断。