C语言如何存储字符串并计数到数组中

问题描述 投票:0回答:1

我的文本文件中有以下数据

we are studying hard
we can go out for vacation
I can have fun!!
I can have fun!!

fun!

所需输出

#1  we       2
#2  are      1
#3  studying 1
#4  hard     1
#5  can      3
#6  go       1
#7  out      1
#8  for      1
#9  vacation 1
#10 I        2
#11 have     2
#12 fun      3

我必须显示每个单词及其重复次数。

我尝试了以下代码,

#include <stdio.h>
#include <stdlib.h>
    
#define MAX_LEN 1000
    
int main(int argc, char *argv[]) {
    char data[MAX_LEN];

    if (argc < 2) {
        printf("Usage: %s filename\n", argv[0]);
        return 1;
    }
    char *filename = argv[1];
    FILE *file = fopen(filename, "r");

    if (file == NULL) {
        perror("Error opening file");
        return(1);
    }
    int line = 0;

    char c;
    while ((c = fgetc(file)) != EOF)
    {
        if (c == ' ' || c == '\n')
        {
            printf("\n");
        }
        else
        {
            line++;
            printf("%c", c);
        }
    }

    for (int i = 0; i < line; i++)
        printf("%s", data[i]);

    fclose(file);
    return 0;
}

上面的代码正在打印值,但我无法找到计数。任何人都可以建议我更正我的代码吗?我是编码新手,但渴望学习。谢谢!!

我希望找到文件中重复字符的计数。

arrays c string pointers
1个回答
0
投票

存在多个问题:

  • c
    应定义为
    int
    ,以便测试
    while ((c = fgetc(file)) != EOF)
    可靠运行
  • 您在每个分隔符上递增
    line
    ,但绝不将任何内容存储到数组中
    data
  • printf("%s", data[i]);
    传递
    char
    ,其中
    printf
    需要一个字符串指针(
    char *
    指向以 null 结尾的数组)。

您应该按照以下步骤操作:

  • 一次读一个单词,跳过非字符,
  • 在目前看到的单词数组中搜索该单词
  • 如果找到,则增加
    int
  • 数组中的相同条目
  • 如果未找到,请为该单词添加一个新条目并将初始计数设置为
    1

在文件末尾,输出计数和单词数

© www.soinside.com 2019 - 2024. All rights reserved.