C - 单词数组

时间:2010-12-02 03:01:00

标签: c arrays pointers

我对编程很新,如果这个问题看似微不足道,那就很抱歉。我已经找到了答案,但我不能直截了当。我们已经在课堂上介绍了这一点,但我的大脑现在完全让我失望了。

在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

2 个答案:

答案 0 :(得分:1)

使用scanfdo..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...
}

对于记录,此解决方案有效。

屏幕截图:(在这种情况下将长度变量设置为5)


alt text

答案 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)