首页 > 解决方案 > 使用c中的堆栈以相反的顺序写入文本文件中的所有单词

问题描述

我有一个作为第一个命令行参数传递的文本文件,我需要将文件中的所有单词加载到堆栈中,然后以相反的顺序将它们写回。单词不必颠倒,只要它们最初的顺序即可。

示例Words.txt

我爱苹果

程序完成运行后,Words.txt

苹果爱我

我写了我的代码,它没有给我任何错误,但由于某种原因它仍然不起作用。

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

typedef struct cvor
{
    char rijec;
    struct cvor *sljedeci;
} CVOR;

void push(CVOR **tos,char rijec)
{
    CVOR *novi=(CVOR*) malloc(sizeof(CVOR));
    novi->rijec=rijec;
    novi->sljedeci=*tos;
    *tos=novi;
}

int pop(CVOR **tos,char *rijec)
{
    if(*tos==0)
        return 0;
    CVOR *p=*tos;
    *rijec=p->rijec;
    *tos=p->sljedeci;
    free(p);
    return 1;
}

int main(int argc,char *argv[])
{
    FILE *dat;
    CVOR *tos=0;
    char rijec;
    if((dat=fopen(argv[1],"r")))
    {
        while((fscanf(dat,"%s",&rijec))!=EOF)
            push(&tos,rijec);
        fclose(dat);
    }
    if((dat=fopen(argv[1],"w")))
    {
        while(pop(&tos,&rijec))
            fprintf(dat,"%s\n",&rijec);
        fclose(dat);
    }
    return 0;
}

标签: c

解决方案


您编写了一个程序,可以反转所有字符,但不反转单词。换句话说,我期望:

I love apples

成为:

selppa evol I

为了解决这个问题,我建议你,不要只是创建一个包含所有字符的数组,而是一个单词数组,每个单词都是字符的子数组。您阅读字符并根据字符(是否为空格)决定您仍在处理同一个单词或者您正在开始一个新单词。

为了反转,您只需反转外部数组(带有单词的数组),但每个子数组(单词本身)都应该保持不变。


推荐阅读