繁体   English   中英

C codig 中结构中的字符串问题

[英]Issues with string in structure in C codig

我对结构中的字符串有一些问题,我认为问题出在 strcpy(),但我无法解决。 我的练习说我必须编写一个程序来打印作为输入给出的不同单词,按照出现频率递减的顺序排序,并在每个单词之前加上它的出现次数。 我认为 scanf 可能做错了所以我使用 fgets() 到 stdin 从输入中获取我的字符串,但它没有解决我的问题:(。这是我的代码(我还没有编写 function 来打印单词频率顺序)。

/*
Write a program that prints the distinct words given as input, sorted in order of frequency of
decreasing occurrence. Precede each word with its number of occurrences.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

#define SIZE 30
#define MAXWORD 5

typedef struct word_dictionary{
    char ww[SIZE];
    int occ;
} word;

int is_in_bucket(char *str, word data[]){
    int j;

    for(j=0;j<MAXWORD;j++){
        if( strcmp(str,data[j].ww) == 0)
            return 1;
    }

    return 0;
}




void print_bucket(word data[]) {
    int i;
    
    for(i=0;i<MAXWORD;i++){
        printf("{%d, %s} ", data[i].occ, data[i].ww);
    }

    printf("\n");
}

void main( int argc, char **argv) {
    word bucket[MAXWORD];
    char aux[SIZE];
    int i;
    int x;
    int cond;

    for(i=0;i<MAXWORD;i++) {
        printf("Insert the word you want to save in the data structure: ");
        scanf("%s",aux);
        
        cond = is_in_bucket(aux,bucket);
        if(cond == 1) {
            bucket[i].occ = bucket[i].occ + 1;
            memset(aux,0,SIZE);
        } else {
            strcpy(bucket[i].ww, aux);
            bucket[i].occ = 1;
            memset(aux,0,SIZE);
        }
    }

    print_bucket(bucket);
    // print_occurrences();
    
    return;
}

我的终端 output 是:

在数据结构中插入要保存的词:dog

在数据结构中插入要保存的单词:cat

在数据结构中插入要保存的词:dog

在数据结构中插入要保存的词:dog

在数据结构中插入要保存的词:mouse

{1,狗} {1,猫} {-1768437999,} {1,V} {1,老鼠}

我预期的终端 output 应该是:

在数据结构中插入要保存的词:dog

在数据结构中插入要保存的单词:cat

在数据结构中插入要保存的词:dog

在数据结构中插入要保存的词:dog

在数据结构中插入要保存的词:mouse

{3,狗} {1,猫} {1,老鼠}

对于初学者,function main 应具有返回类型 int

int main( int argc, char **argv)

由于未使用 function 参数,因此最好像这样声明 function

int main( void )

function is_in_bucket没有考虑数组bucket中实际初始化元素的数量。 您需要将此号码传递给 function。

如果一个单词已经存在于数组中,并不意味着它恰好存储在数组的第 i 个元素中。

    cond = is_in_bucket(aux,bucket);
    if(cond == 1){
        
        bucket[i].occ = bucket[i].occ + 1;
        memset(aux,0,SIZE);

您需要从 function is_in_bucket返回已初始化元素的索引,否则例如 -1。

此外 function print_bucket应考虑数组bucket的实际填充元素数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM