#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函数逐行录入的访问冲突和
无法打开exe文件进行写入。
我试过每行每列逐个的录入,但是他总是在换行后仍然录入。
想问一下__这个程序问题怎么通过?怎样打开文件,还有就是本地的编译怎样才能按行录入字符串?__
要求写一个程序统计字符串出现次数最多的字符串并输出。
输入:第一行是字符串数量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;
}