c语言的问题!
发布网友
发布时间:2022-05-15 02:53
我来回答
共6个回答
热心网友
时间:2023-10-05 07:23
嘿嘿,在OJ上做题肯定要吃PE的苦,把最后最后最后一个回车去掉再试试
恩,读数据那边也改下,还有这个
不行的话把网址发出来看下
#include<stdio.h>
#include<string.h>
int main()
{
char str1[10000],str2[10000];
int n,i,l1,l2;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%s %s",str1,str2);
l1=strlen(str1);
l2=strlen(str2);
if(l1>l2)
printf("%s",str1);
else if(l1<l2)
printf("%s",str2);
else
printf("no - -!");
printf("\n");
if(n-i)
printf("\n");
}
return 0;
}
现在不能提交,所以只能凭着感觉修改下了
首先 这题没有说明 数据范围,所以字符串 大小 应该 预置得大一些,比如1W,10W,否则因为数组大小而wa 就很不值得。
其他就是一些细节问题了,比如输入尽量按照 题目规定的 模式输入,最后不能多输出回车,return 0;等等吧。
个人认为 这题就 一组测试数据,很多OJ 对一组 和多组数据 都可以用EOF 处理,但有个别题目如果是一组数据,用EOF 的话会tle,这种情况比较少,楼主注意下就好。
楼主如果是新手,建议你去 杭电 OJ做题,里面题目各种档次的都有,很适合初学者,过渡者,而且他的讨论区有很多材料,题目代码,楼主遇到困难时可以比较顺利的解决。
网址是:http://acm.h.e.cn/
热心网友
时间:2023-10-05 07:23
scanf("%s%s",&str1,&str2)改成
scanf("%s%s",str1,str2)
数组名即表示在内存中首地址,不用再取变量地址
#include <stdio.h>
#include <string.h>
int main()
{
int n, i;
int len1, len2;
char szWord1[101], szWord2[101];
while (scanf("%d", &n) == 1)
{
for (i = 0; i < n; i++)
{
scanf("%s %s", szWord1, szWord2);
len1 = strlen(szWord1);
len2 = strlen(szWord2);
if (len1 == len2)
printf("no - -!\n\n");
else if (len1 > len2)
printf("%s\n\n", szWord1);
else
printf("%s\n\n", szWord2);
}
}
return 0;
}
热心网友
时间:2023-10-05 07:24
看来很久才明白你的意思。
#include<iostream.h>
#include<string.h>
int main()
{
char str1[100],str2[100];
int l1,l2;
cout<<"请输入两个字符串"<<endl;
while(cin)
{
cin>>str1>>str2;
l1=strlen(str1);
l2=strlen(str2);
if(l1>l2)
cout<<str1<<endl;
else if(l1<l2)
cout<<l2<<endl;
else
cout<<"no - -!"<<endl;
cout<<endl;
cout<<"请再输入两个字符串"<<endl;
}
return 0;
}
//已经运行过了,希望对你有用!
//另外一个,在第一个基础上改进的,也运行过了。
//只是一点,我这是输入n对,比较一组,输出一次,与你的要求有点不一样。
//你可以用一个大数组把要输出的保存,然后一次性输出,由于时间,
//我帮你写到这里吧,希望对你有帮助。
#include<iostream.h>
#include<string.h>
int main()
{
char str1[100],str2[100];
int l1,l2;
int n;
cout<<"请输入字符串的对数"<<endl;
cin>>n;
//判断n的有效性
while(n<1)
{
cout<<"n不能小于1"<<endl;
}
cout<<"请输入"<<n<<"对字符串"<<endl;
for(int i=0;i<n;i++)
{
cin>>str1>>str2;
l1=strlen(str1);
l2=strlen(str2);
if(l1>l2)
cout<<str1<<endl;//可以定义另外一个数组
//将str1保存
else if(l1<l2)
cout<<str2<<endl;//同上
else
cout<<"no - -!"<<endl;
}
return 0;
}
热心网友
时间:2023-10-05 07:24
程序没有问题,虽然&str1和&str2之前的&是不必要的,但是加上之后也不会导致程序失败,估计题目原意是要求先将n组单词全部输入之后再输出结果,而不是每输入一组就输出该组的结果,以下程序可以达到这个效果:
//---------------------------------------------------------------------------
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{ char str1[100],str2[100],**m=NULL;
int n,i,j,l1,l2;
while(scanf("%d",&n)!=EOF)
{
m=malloc(sizeof(char *)*n);
for(i=1;i<=n;i++)
{ scanf("%s%s",str1,str2);
l1=strlen(str1);
l2=strlen(str2);
m[i-1]=malloc(sizeof(char)*((l1>l2?l1:l2)+1));
if(l1>l2) strcpy(m[i-1],str1);
else if(l1<l2) strcpy(m[i-1],str2);
else strcpy(m[i-1],"no - -!");
}
for (i = 0; i<n; i++) {
printf("\n%s\n",m[i]);
}
free(m);
}
return 0;
}
//---------------------------------------------------------------------------
热心网友
时间:2023-10-05 07:25
这个题目我的理解是题目中只输入一个n,然后跟对应n对单词。所以我估计格式错误就只能是每组的最后一个回车不要输出。现在提交不了。题目也没有给出明确的单词长度,不过你说的是格式问题,所以应该就不会有数组越界的问题了。
#include<stdio.h>
#include<string.h>
int main()
{
char str1[100],str2[100];
int n,i,j,l1,l2;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
scanf("%s%s",&str1,&str2);
l1=strlen(str1);
l2=strlen(str2);
if(l1>l2)
printf("%s\n",str1);
else
if(l1<l2)
printf("%s\n",str2);
else
printf("no - -!\n");
if(i!=n) printf("\n");//最后一行不用
}
}
}
热心网友
时间:2023-10-05 07:26
程序没有错误啊,只是不能跳出循环罢了
稍微修改一下就好了
#include<stdio.h>
#include<string.h>
int main()
{
char str1[100],str2[100];
int n,i,j,l1,l2;
scanf("%d",&n);//这里不应该用while,否则当输入的数有效时会造成死循环
if(n<0)
printf("the number is wrong!\n");
else
for(i=1;i<=n;i++)
{
scanf("%s%s",&str1,&str2);
l1=strlen(str1);
l2=strlen(str2);
if(l1>l2) printf("%s\n",str1);
else if(l1<l2)
printf("%s\n",str2);
else
printf("no - -!\n");
printf("\n");
}
}