这个题目我不明白它是什么意思,她到底是要重复的字符串,还是要重复的最多的字符串,还是其他的什么意思。
然后我以为是重复的最多的,所以就这样写。
#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函数逐行录入的访问冲突和
无法打开exe文件进行写入。
我试过每行每列逐个的录入,但是他总是在换行后仍然录入。
想问一下__这个程序问题怎么通过?怎样打开文件,还有就是本地的编译怎样才能按行录入字符串?__