C 在文件中查找单词,检查它们是否是回文

C 在文件中查找单词,检查它们是否是回文,c,palindrome,C,Palindrome,我试着写一个程序,从读取的文件中找到一个单词,并检查它是否是回文(两边都是同一个单词),如果是,则保存到另一个文件中,并用return分隔。阅读文件中的单词可以用任何方式书写:用空格分隔、用句子分隔或用回车分隔 #include<stdlib.h> #include<stdio.h> #include<string.h> #define MAX 255 int palindrome(char *x, int y, int i) { while(i&

我试着写一个程序,从读取的文件中找到一个单词,并检查它是否是回文(两边都是同一个单词),如果是,则保存到另一个文件中,并用return分隔。阅读文件中的单词可以用任何方式书写:用空格分隔、用句子分隔或用回车分隔

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define MAX 255

int palindrome(char *x, int y, int i) 
{
    while(i<=y){
        if(x[i]!=x[y])
            return 0;
        i++;y--;
    }
    return 1;
}

int main()
{
    char *reading; 
    int length;
    int x=0;
    int y=0;
    char read[MAX];
    char write[MAX];
    FILE *r;
    FILE *w;
    puts("Enter read file name");
    scanf("%s", read);
    puts("Enter write file name");
    scanf("%s", write);
    r=fopen(read, "r"); 
    if(r==NULL)
        perror("File does not exist");
    w=fopen(write, "w");
    reading=malloc(MAX*sizeof(char));
    while(fgets(reading, MAX, r)!=NULL) 
    {
        length=strlen(reading);
        while(x<=length){
            for(x=y; ;x++){
                printf("%c\n", reading[x]);
                if((reading[x]>='a'&& reading[x]<='z') || (reading[x]>='A' && reading[x]<='Z'))
                    break;
            }
            for(y=x; ;y++){
                printf("%c\n",reading[y]);
                if((reading[y]>='a'&& reading[y]<='z') || (reading[y]>='A' && reading[y]<='Z'));
                else
                    break;
            }
            if(palindrome(reading, y, x)==1)
                for( ;x<=y;x++)
                fputc(reading[x], w);
            x=y;
        }
    }
    fclose(r);
    fclose(w);
    return 0;
}
#包括
#包括
#包括
#定义最大值255
整型回文(字符*x,整型y,整型i)
{

而(i我发现您的代码中有一个错误,
x的限制错误

length=strlen(reading);
while(x<=length){

发布的代码有效吗?那么问题到底是什么?问题是代码不起作用…“不起作用”可能是一个准确的描述,但更多的细节可能会有所帮助。毕竟,如果它真的起作用,你不必在这里问。它是否会输出下周的彩票号码?它会崩溃吗?它“什么都不做”,甚至什么都不输出吗?谢谢,这是非常有用的,一个问题,“rt”和“r”之间的区别是什么?文件打开默认为
“b”
二进制模式,您正在读取和写入文本文件。另一件我无法完全理解的事情是这些行的真正作用:while(读取[x]&&!isalpha(读取[x])-为什么需要读取[x],!isalpha还不够?///////while(isalpha(读取[y])-认为这意味着,如果字母来自字母表,则循环将在[x]读取时继续进行[C];-何时将为false?////因为当字符终止字符串时,
reading[x]==0
,但
isalpha()
返回false,循环将运行到字符串末尾。表达式
reading[x]
在布尔意义上是真的,没有实际与任何东西进行比较,因为它是非0。此特定循环用于在提取单词之前丢弃非alpha字符。字符串可能以单词开头,也可能不以单词开头,或者该字符串中甚至可能没有单词。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define MAX 255

int palindrome(char *string, int x, int y) 
{
    if (x >= y)
        return 0;
    while (y > x)
        if (tolower(string[x++]) != tolower(string[--y]))
            return 0;
    return 1;
}

int main()
{
    char reading[MAX+1]; 
    char readfile[MAX+1]; 
    int x, y, i;
    FILE *r;
    puts("Enter read file name");
    scanf("%s", readfile);
    r=fopen(readfile, "rt"); 
    if(r==NULL)
        perror("File does not exist");
    else {
        while (fgets (reading, MAX, r) != NULL) {
            x = 0;
            do {
                while (reading[x] && !isalpha (reading[x]))
                    x++;
                y = x;
                while (isalpha (reading[y]))
                    y++;
                if (palindrome (reading, x, y)) {
                    printf ("Palindrome: ");
                    for (i=x; i<y; i++)
                        printf ("%c", reading[i]);
                    printf ("\n");
                }
                x = y;
            }
            while (reading[x]);
        }
        fclose(r);
    }
    return 0;
}