簡體   English   中英

C-從一個文件遞歸地將字符串反向轉換為另一個文件

[英]C - Recursively reverse string from one file into another file

我正在嘗試使用遞歸將文本文件中的字符串反向轉換為另一個文本文件。 反向的字符串將存儲在char數組中,並且緩沖區將成為該數組。 然后將緩沖區打印到新文件。 到目前為止,這就是我所擁有的。

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

        int
        reverse(char *ch, char *str)    //receives "buffer" as argument. str traverses ch
        {
            char array[20]; //will store the reversed string

            if(*str == '\0')
                return 0;   //arrived at end of string
            return(reverse(ch, str+1) + 1);      //don't know if this is correct
        }

//I want to use the returned number as the index number. For example, if I have
//string "abcd", string[0]='d', string[1]='c', string[2]='b', string[3]='a'. Problem is,
//how do I do it?


        int main(int argc, char *argv[])    //argv[1] is input file. argv[2] is output file printed backwards
        {   
            FILE *fp1, *fp2;
            char *p, buffer[20];    //p points to buffer

            fp1 = fopen("a.txt", "r");
            if(fp1 == NULL)
            {
                printf("The file does not exist.\n");
                return 0;
            }

            p = buffer;
            while(fgets(buffer, 20, fp1) != NULL)   //reads the first 20 characters of file.txt into buffer
            {
                reverse(buffer, p); //passes "buffer" as argument
                fprintf(fp2, "%s\n", buffer);
            }

            printf("File %s has been successfully reversed into file %s!\n", argv[1], argv[2]);
            fclose(fp1);
            fclose(fp2);
            return 0;
        }

由於我不熟悉遞歸,因此我對如何實現反向功能只有最模糊的想法。

通過迭代循環更容易,更快捷地反轉字符串,但要創建遞歸函數,您可以讓函數反轉起始字符和結束字符,然后使用較小的字符串重復該過程

abcde 
^   ^  first call
 ^ ^   next call
  ^    end

---

void reverse(char *s, char *e) {
  char tmp = *s;
  *s++ = *e;
  *e-- = tmp;
  if (e > s) reverse (s, e);
}

s指向第一個字符, e指向最后一個字符。 請注意,初始字符串的長度必須大於0(否則可以將測試添加到函數中)。

例子

int main () {
    char x[] = "abcde";  
    reverse(x, x+strlen(x)-1);  
    printf("%s\n", x);  
    return 0;  
}  

輸出edcba

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM