c - 使用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;
}
解决方案
您编写了一个程序,可以反转所有字符,但不反转单词。换句话说,我期望:
I love apples
成为:
selppa evol I
为了解决这个问题,我建议你,不要只是创建一个包含所有字符的数组,而是一个单词数组,每个单词都是字符的子数组。您阅读字符并根据字符(是否为空格)决定您仍在处理同一个单词或者您正在开始一个新单词。
为了反转,您只需反转外部数组(带有单词的数组),但每个子数组(单词本身)都应该保持不变。
推荐阅读
- android - rawQuery() 格式化
- c++ - 分发我自己的程序的几个问题
- rstudio - 如何从 RStudio RMarkdown 控制台复制错误消息?
- javascript - 映射任意字符串的 React 键约定
- javascript - jquery自动滚动网站暂停
- c++ - 霍夫曼树指针指向意外位置
- npm - ExperimentalWarning: fs.promises API 是实验性的
- android - 未解决的参考 - 开发人员培训
- materialize - 物化形式| material_select 不是函数
- fortran - gfortran 中的常见块错误(字节填充)