讲解对象:回文字问题C语言实现
作者:融水公子 rsgz
理解:回文字就是顺着读和倒着读都是一样的文字
要求:请编写一个函数判断是不是回文
思路:
1 设置整数类型标志变量flag(回文是1 不是为0)
2 开始假设字符串是回文(flag=1)
3 利用循环将字符串的第一个字符和最后一个字符作比较
( flag==0 不是回文 flag==1 是回文)不是回文就结束
是回文就继续比较倒数第二个 直到结束
4 n个字符串至少比较n/2次
5 返回flag
6 p向右移动 p++
7 q向左移动 q--
8 p<q意味着p在左边
两种方法实现:
1 指针法实现回文的判断
2 下标法实现回文字符串的判断
1 指针法实现回文的判断
提示:
//本例由于文件需要 提前创建一个txt文件
//d:\\out.txt
//然后你会发现突然多了一个txt里面多了四个判断
//yes
//no
//yes
//yes
#include<stdio.h>
#include<stdlib.h>
#define N 80
//指针法判断回文字符串
int PalindromeFun(char *str) {//定义判断回文函数 参数是字符串
int flag = 1;//定义一个标志变量 flag 假设字符串都是回文 flag初始值都为一
char *p, *q;//定义两个指针变量 分别指向字符串的首尾
//----------------------------------
p = q = str;//pq同时指向首字母
while (*q != '\0') {//while循环移动指针变量q
q++;
}
q--;//q此时就指向字符串的最后一个字母
//通过以上的操作 p指向首字母 q指向尾字母
//----------------------------------
while (p<q) {
if (*p != *q) {//说明字符串不是回文字符串
flag = 0;
break;
}
p++;//反之相等就执行p加加操作
q--;//反之相等就执行q减减操作
}
return flag;//循环结束之后将flag变量的值作为返回值返回
}
int main() {
char s[N];//定义一个字符数组 用来接收字符串
FILE *out;
char *test[] = { "1234321","123421","123321","abcdCBABCdcba" };
int i;
printf("Enter a string");
gets_s(s); printf("\n\n");
puts(s);
if (PalindromeFun(s)) {
printf("yes");
}
else {
printf("no");
}
out = fopen("D:\\out.txt", "w");//
for (i = 0; i<4; i++) {
if (PalindromeFun(test[i])) {
fprintf(out, "yes\n");
}
else {
fprintf(out, "no\n");
}
}
fclose(out);
system("pause");
return 0;
}
2 下标法实现回文字符串的判断
#include<stdio.h>
#include<stdlib.h>
#define N 80
int PalindromeFun(char *str) {
int i, n = 0;
int flag = 1;//假设开始是回文字符串
for (i = 0; str[i] != '\0'; i++) {
n++;//字符串的长度保存在n变量中
}
for (i = 0; i<n / 2; i++) {//利用循环将字符串对应位置的字符取出来进行比较
if (str[i] != str[n - 1 - i]) {//长度为n的字符串最多需要比较n/2次
flag = 0;
break;
}
}
return flag;
}
int main() {
char s[N];//定义一个字符数组 用来接收字符串
FILE *out;
char *test[] = { "01234321","123421","123321","abcdCBABCdcba" };
int i;
printf("Enter a string:\n");
gets_s(s); printf("\n\n");
puts(s);
if (PalindromeFun(s)) {
printf("yes");
}
else {
printf("no");
}
out = fopen("D:\\out.txt", "w");//
for (i = 0; i<4; i++) {
if (PalindromeFun(test[i])) {
fprintf(out, "yes\n");
}
else {
fprintf(out, "no\n");
}
}
fclose(out);
system("pause");
return 0;
}