2014-11-23 67 views
0

我试图写一个程序,读取文件,并检查它是否是回文(双方同一个词)发现一个字或词,如果是这样,它们被保存到由返回分隔的另一个文件中。阅读文件中的单词可以用任何方式书写:用空格隔开,用句子或回车隔开。查找单词的文件,检查它们是否回文

#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; 
} 

问题是代码不工作,如何解决它?

+0

是否张贴的代码工作? – 2014-11-23 10:50:48

+4

那么问题到底是什么? – Mureinik 2014-11-23 10:57:28

+0

问题是代码不起作用... – DevGambit 2014-11-23 11:57:10

回答

0

我在你的代码有误,这里用错限制x

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

所以我做的方式相当多的变化probem被解决,而不是找出你可能会打破什么其他限制。我已将输出写入stdout而不是写入文件。请注意,我还在文件打开模式中添加了"t"

#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; 
} 
+0

谢谢,这是相当丰富的,一个问题,“rt”和“r”有什么区别? – DevGambit 2014-11-23 13:31:08

+0

文件开启默认为''b“'二进制模式,您正在读写文本文件。 – 2014-11-23 13:44:54

+0

我不能完全理解的另一件事是这些行确实是这样做的:while(reading [x] &&!isalpha(reading [x])) - 为什么需要阅读[x]和!isalpha是不够的? while(isalpha(reading [y])) - 认为这意味着如果字母是来自字母表,那么循环继续////// while(reading [x]); - 什么时候会是假的? ////// – DevGambit 2014-11-23 21:47:22

相关问题