我对编程很新,如果这个问题看似微不足道,那就很抱歉。我已经找到了答案,但我不能直截了当。我们已经在课堂上介绍了这一点,但我的大脑现在完全让我失望了。
在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;
}
我知道这不是全部因为我需要比较有一个新的地址,如何建议去做呢?我需要使用结构还是有其他方法?我应该使用malloc吗?
如果我问一个愚蠢的问题,我道歉。由于这是我在这里发表的第一篇文章,因此我非常感谢您对此问题提出的任何意见,因为我已经非常尊重这个社区,并且不想用愚蠢的问题来破坏它。哦,对问题本身的意见也很感激:)谢谢, Slashstar
答案 0 :(得分:1)
使用scanf
和do..while
循环:
int counter = 0, i;
int length = 15;
char *wordz[length];
do {
printf("Enter word number %d:", counter+1);
char *temp = (char *) malloc(sizeof(char*));
scanf("%s", temp);
if(temp) {
wordz[counter++] = temp;
}
} while(counter < length);
for(i = 0; i < length; i++) {
printf("\nWord number %d is %s", i+1, wordz[i]);
free(wordz[i]); //we malloc'd in the do statement above, so we must free the memory...
}
对于记录,此解决方案有效。
答案 1 :(得分:1)
这样的东西应该适用于windows,你需要删除\ r \ n以及
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,如果输入的字符串太长而无法覆盖内存,则只能分配实际需要的空间(部分来自MAXNUMBEROFWORDS)