Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 反转多个文件的所有字符串_C_String_Pointers_Reverse - Fatal编程技术网

C 反转多个文件的所有字符串

C 反转多个文件的所有字符串,c,string,pointers,reverse,C,String,Pointers,Reverse,我需要一个程序来反转一个或多个文本文件中存储的所有字符串的顺序。到目前为止,我得到的是: #include <stdio.h> main(int argc, char *argv[]) { int i; for (i=1;i < argc;i++) { FILE *MyFile=fopen(argv[i], "r"); int i,len; char str[1000], *ptr; fg

我需要一个程序来反转一个或多个文本文件中存储的所有字符串的顺序。到目前为止,我得到的是:

#include <stdio.h>

main(int argc, char *argv[])
{
    int i;
    for (i=1;i < argc;i++)
    {
        FILE *MyFile=fopen(argv[i], "r");
        int i,len;
        char str[1000], *ptr;
        fgets(str, 1000, MyFile);
        ptr = str;
        for(i=0;i<1000;i++)
        {
            if(*ptr == '\0')  break;
            ptr++;
        }
        len = i;
        ptr--;
        for(i=len; i>0; i--)
        {
            printf("%c",*ptr--);
        }
        printf("\n");
        fclose (MyFile);
    }
    return 0;
}
#包括
main(int argc,char*argv[])
{
int i;
对于(i=1;i
我不能做的是正确地循环程序,以便它反转所有字符串。当前,它反转所有文件的第一个字符串,但当遇到换行符时,FGET停止。我试图做的是计算当前文件中的行数,执行for循环,最后执行另一个
fgets(str,1000,MyFile)以推进FGET,但我不知怎么搞砸了事情

我想到的另一个选择是创建一个单独的函数,它只反转给定的字符串,并在主函数中调用该函数适当的次数,但我不确定在这种情况下如何处理argc和*argv[]

有什么帮助吗?谢谢

  • 您正在用内部声明的另一个变量来填充外部循环的
    i
    变量。这很可能就是它不起作用的原因
  • 您应该使用
    strlen()
    函数来获取字符串长度,而不是手动计算
  • <> LI>除非保证最多有1000字节的字符串,否则您应该考虑使用更聪明的算法来满足更长的字符串。
在缓冲区中累积每个
字符
,直到检测到字符串结尾(
\0
)。然后将其反向打印

printf_reverse(const char *buf, size_t len) {
  while (len > 0) {
    fputc(buf[--len], stdout);
  }
}

char buf[1000];
size_t len = 0;
int ch;
while ((ch == fgetc(MyFile)) != EOF) {
  if (ch == '\0') {
    printf_reverse(buf, len);
    len = 0;
  }
  // You may want not use EOL as part of the reverse
  else if (ch == '\n') {
    printf_reverse(buf, len);
    fputc(ch, stdout);
    len = 0;
  }
  else if (len < sizeof(buf)) {
    buf[len++] = ch;
  }
  else {
    ; // handle error string too long
  }
printf_reverse(buf, len);
printf_reverse(常量字符*buf,大小长度){
而(len>0){
fputc(buf[--len],标准值);
}
}
char-buf[1000];
尺寸长度=0;
int-ch;
而((ch==fgetc(MyFile))!=EOF){
如果(ch=='\0'){
反向打印(buf,len);
len=0;
}
//您可能不希望将EOL用作反向的一部分
else if(ch='\n'){
反向打印(buf,len);
fputc(ch,stdout);
len=0;
}
else if(len

OP表示“ABCD 1234应输出:DCBA 4321”。在C中,字符串以
\0
结尾。不清楚源文件是否嵌入了
\0
,或者OP还希望使用空格来指示字符串的结尾。

第二个选项接近您应该做的操作(将问题/程序分成较小的部分),但我不明白“我不知道如何处理argc和*argv[]”问题。这样的函数可能不需要知道有关
argc
argv
的任何信息,这是您遇到的问题?您是要在文件的每一行都反转的情况下生成输出,还是在文件中的行顺序反转的情况下生成输出?内容反转,s带有:ABCD 1234的文件应输出:DCBA 4321OP有两个变量ables
i