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

img


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




#include 
#include 
#include 
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

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

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

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

输入:第一行是字符串数量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;
}