我对编程还很陌生,如果这个问题看起来微不足道,我很抱歉。我一直在寻找答案,但我找不到一个直接的答案。我们在类里面讲过这个,但我的大脑现在完全崩溃了。
在 C 中,我需要制作一个数组,以便每个元素对应一个单词。
编辑:我只是记得我应该用指针数组做点什么。所以像这样的事情就是我正在做的......
main()
{
char *line[MAXLINE]; // This points to the beginning of words in compare[]
char compare[MAXLINE]; // This is where the words will be read in
int counter[MAXLINE]; // Counter for the words that appear more than once
char c;
int i = 0;
int n;
for (n=0; c!=EOF; n++){
while ((c=getchar())!=' '||c!='\n'||c!=EOF){
compare[i]=c;
i++;
}
line[n]=compare;
i = 0;
}
我知道这不是全部,因为我需要让 compare 有一个新地址,有人会建议这样做吗?我需要使用结构还是有其他方法?我应该为此使用 malloc 吗?
如果我问了一个愚蠢的问题,我深表歉意。由于这是我在这里发表的第一篇文章,因此非常感谢我提出这个问题的任何意见,因为我已经非常尊重这个社区并且不想用愚蠢的问题来破坏它。哦,对问题本身的投入也很感激:)
谢谢, 斜线之星
最佳答案
像这样的东西应该适用于 (linux) 你需要在最后删除\r 的 Windows
char buf[MAXLINE];
char** wordsz = malloc( MAXNUMBEROFWORDS * sizeof(char*) );
int wordCount = 0;
while (fgets( buf, MAXLINE, stdin )!=NULL && wordCount<MAXNUMBEROFWORDS)
{
int len = strlen(buf);
if ( buf[len-1] == '\n' ) buf[len-1]='\0';
wordsz[wordCount] = malloc( strlen(buf) + 1 );// assuming sizeof(char)==1 + \0
strcpy(wordsz[wordCount++], buf);
}
当您按下 EOF 时,fgets 返回 NULL,如果输入太长的字符串,您将无法覆盖内存,就像 scanf 一样,您只分配您实际需要的空间(来自 MAXNUMBEROFWORDS 的一部分)
关于C - 单词数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4331277/