[英]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.