2013-12-22 84 views
-4

我在编写代码,但是我找不到任何关于我的任务的正确信息。这令人沮丧。我需要从input.txt文件中读取行的程序,并将文字的相反顺序写入output.txt文件。c中一个句子中的单词反向排列顺序

input.txt可能会改变,所以我们不知道它里面有多少行和单词。所有标点符号都必须删除。如果单词之间有一个以上的空格,这个程序应该给我们output.txt单词之间有单个空格。

例如:

input.txt中

这是一本书吗?是的。

output.txt的

的sI SIHT一个koob? sey,tI si。

+0

尝试自己先写代码,这里有一些提示:1.you需要保留一个字,所以如何在一个句子中找到一个单词的边界? 2.如果你找到边界,就像翻转整个句子。那么如何预留一个字符串呢?谢谢 – VELVETDETH

+1

_所有标点符号都必须移除。 – BLUEPIXY

+0

你是否故意省略'input.txt'中的逗号后面的空格?你是否需要程序在输出中插入空格?如果是这样,在什么条件下应该插入一个空间? – Armali

回答

0

下面是一个示例程序,它的工作:

#include <stdlib.h> 
#include <stdio.h> 

/* Function to get reverse of the passed string */ 
void reverse(char *string, FILE* fp) 
{ 
    if(*string) 
    { 
     reverse(string+1,fp); 
     fputc(*string,fp); 
    } 

} 


int main() 
{ 
    char word[100]; 
    size_t len = 0; 
    FILE * fpInput,*fpOutput; 
    fpInput = fopen ("input.txt", "r+"); 
    fpOutput = fopen ("output.txt", "w+"); 
    while(fscanf(fpInput,"%98s",word)>0) 
    { 
     strncat(word," ",1); 
     reverse(word,fpOutput); 
    } 
    return 0; 
} 
+0

这不会产生问题示例中指定的输出。 – Armali

0
#include <ctype.h> 
#include <stdio.h> 
#include <stdlib.h> 

FILE *I, *O; 
int wasspace; 

int revword() 
{ 
    int c; 
    while (isspace(c = fgetc(I))) 
     if (wasspace++) continue; 
     else return c; 
    wasspace = 0; 
    if (c == EOF || ispunct(c)) return c; 
    int delim = revword(); 
    fputc(c, O); 
    return delim; 
} 

int main() 
{ 
    char *name; 
    if (!(I = fopen(name = "input.txt", "r")) 
    || !(O = fopen(name = "output.txt", "w")) 
     ) return perror(name), 1; 
    int delim; 
    while ((delim = revword()) != EOF) 
     fputc(delim, O); 
    return 0; 
} 
相关问题