㧡悈 2023-01-31 14:03 采纳率: 25%
浏览 39
已结题

字符串类鬼画符不知到哪里有错误

img


这个题目我不明白它是什么意思,她到底是要重复的字符串,还是要重复的最多的字符串,还是其他的什么意思。
然后我以为是重复的最多的,所以就这样写。




#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void solution(int m, char(*str)[10]) {

    int i, j, k;
    char *q,*p;
    q = (char(*))malloc(m * sizeof(char*));
    p = (char(*))malloc(m * sizeof(char*));
    int sum,max;
    sum=0;
    max = 0;
    k = 0;
    q=str[0];
    p=str[0];
    for (i = 0; i < m-1; i++)
    {
        sum = 0;
        for (j = i + 1; j < m; j++)                          //每行和它后面的行进行比较
        {
            if (strlen(str[i]) == strlen(str[j]))          //比较字符串的个数
            {
                for (k = 0; k < strlen(str[i]); k++)  //两行的字符串一一对应进行比较
                {
                    if (str[i][k] != str[j][k])           // 检测是否有不同的,如果有终止,
                    {
                        break;
                    }
                }
               if (k == strlen(str[i]))                    //而相同的字符串k一定加到比strlen函数多一,
                {                                                  //这样来判断是否相同,如果相同则sum加一
                    q = str[i];
                    sum++;
               }
            }
        }
        if (sum > max)                              //sum是每行相比较的相同个数,max则是全部,
        {                                                 //sum比他大则进行替换,从而得出重复最多的字符串。
            p = q;
            max = sum;
        }
    }
    printf("%s", p);
}
int main() {

    int n;
    scanf("%d", &n);

    char(*str)[10];
    str = (char(*)[10])malloc(n * sizeof(char*));

    for (int i = 0; i < n; i++)
    {
        scanf("%s", str[i]);
    }

    solution(n, str);
    return 0;
}

然后示例它显示的是正确的,但是只通过了百分之二十。不知道为什么?
还有就是在本地的编译器上面运行,他总显示有问题,总是说主函数那里的scanf函数逐行录入的访问冲突和

img

无法打开exe文件进行写入。

img

我试过每行每列逐个的录入,但是他总是在换行后仍然录入。

想问一下__这个程序问题怎么通过?怎样打开文件,还有就是本地的编译怎样才能按行录入字符串?__

  • 写回答

2条回答 默认 最新

  • m0_54204465 2023-01-31 14:28
    关注

    要求写一个程序统计字符串出现次数最多的字符串并输出。

    输入:第一行是字符串数量n,以下n行是n个字符串。
    输出:出现次数最多的字符串。以下是用 Python 实现的代码:

    from collections import defaultdict
    
    n = int(input().strip())
    d = defaultdict(int)
    
    for i in range(n):
        s = input().strip()
        d[s] += 1
    
    max_s = max(d, key=d.get)
    print(max_s)
    
    

    以下是用 C 语言实现的代码:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define MAX_LEN 1001
    #define MAX_STR 1001
    
    int n;
    char s[MAX_LEN][MAX_STR];
    int count[MAX_LEN];
    
    int cmp(const void *a, const void *b)
    {
        return *(int *)b - *(int *)a;
    }
    
    int main()
    {
        int i, j;
        scanf("%d", &n);
        for (i = 0; i < n; i++) {
            scanf("%s", s[i]);
            for (j = 0; j < i; j++)
                if (strcmp(s[j], s[i]) == 0) {
                    count[j]++;
                    break;
                }
            if (j == i) count[j] = 1;
        }
        qsort(count, i, sizeof(int), cmp);
        for (i = 0; i < n; i++)
            if (count[i] == count[0])
                printf("%s\n", s[i]);
        return 0;
    }
    
    

    这些错误消息是由代码中的语法错误导致的。在scanf_s()函数中,请确保使用正确的参数计数和类型。请注意,str 变量应该是 char ** 类型,而不是 char ()[10] 类型。在malloc()中,请使用 nsizeof(char*) 而不是 nsizeof (char))。在代码中,请修正语法错误并重试。scanf_s 函数应该替换为 scanf,因为 scanf_s 仅适用于 Visual Studio 环境,在其他编译器中不能使用。
    str 变量是指向字符指针的指针,你用 malloc 分配的内存是 char * 类型的,不匹配,因此需要更改 malloc 语句。
    使用 scanf 输入字符串,请使用 "%s" 而不是 "(const char [3])"%s"。
    以下是更正后的代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int n;
        scanf("%d", &n);
    
        char (*str)[10] = (char (*)[10])malloc(n * 10 * sizeof(char));
        for (int i = 0; i < n; i++) {
            scanf("%s", str[i]);
        }
    
        solution(n, str);
        return 0;
    }
    
    

    此外,请确保将字符串录入到文件中的方法是正确的。可以使用 fopen 函数打开文件并使用 fscanf 函数从文件中读取字符串,例如:

    #include <stdio.h>
    
    int main() {
        FILE *fp = fopen("file.txt", "r");
        char str[10];
        while (fscanf(fp, "%s", str) != EOF) {
            printf("%s\n", str);
        }
        fclose(fp);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月28日
  • 已采纳回答 2月20日
  • 创建了问题 1月31日

悬赏问题

  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?