求各位大牛帮忙!!!杭电2564题,很水的一道题,为什么WA?
词组缩写TimeLimit:2000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)TotalSubmi...
词组缩写
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3722 Accepted Submission(s): 1210
Problem Description
定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写。
比如,C语言里常用的EOF就是end of file的缩写。
Input
输入的第一行是一个整数T,表示一共有T组测试数据;
接下来有T行,每组测试数据占一行,每行有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成;
单词长度不超过10,由一个或多个空格分隔这些单词。
Output
请为每组测试数据输出规定的缩写,每组输出占一行。
Sample Input
1
end of file
Sample Output
EOF
Author
lemon
代码是
#include<stdio.h>
#include<string.h>
main()
{
int ri,repeat,i,n,m;
char a[200];
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{ m=0;
if(ri==1)
getchar();
gets(a);
n=strlen(a);
if(a[0]>='A'&&a[0]<='Z')
printf("%c",a[0]);
else if(a[0]>='a'&&a[0]<='z')
printf("%c",a[0]-32);
for(i=1;i<n;i++)
{
if(a[i]==' '&&a[i+1]!=' ')
if(a[i+1]>='A'&&a[i+1]<='Z')
printf("%c",a[i+1]);
else
{ printf("%c",a[i+1]-32);
m++;
if(m>=9)
break;
}
}
printf("\n");
}
} 展开
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3722 Accepted Submission(s): 1210
Problem Description
定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写。
比如,C语言里常用的EOF就是end of file的缩写。
Input
输入的第一行是一个整数T,表示一共有T组测试数据;
接下来有T行,每组测试数据占一行,每行有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成;
单词长度不超过10,由一个或多个空格分隔这些单词。
Output
请为每组测试数据输出规定的缩写,每组输出占一行。
Sample Input
1
end of file
Sample Output
EOF
Author
lemon
代码是
#include<stdio.h>
#include<string.h>
main()
{
int ri,repeat,i,n,m;
char a[200];
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{ m=0;
if(ri==1)
getchar();
gets(a);
n=strlen(a);
if(a[0]>='A'&&a[0]<='Z')
printf("%c",a[0]);
else if(a[0]>='a'&&a[0]<='z')
printf("%c",a[0]-32);
for(i=1;i<n;i++)
{
if(a[i]==' '&&a[i+1]!=' ')
if(a[i+1]>='A'&&a[i+1]<='Z')
printf("%c",a[i+1]);
else
{ printf("%c",a[i+1]-32);
m++;
if(m>=9)
break;
}
}
printf("\n");
}
} 展开
2个回答
展开全部
1)第一个字母可能也是空格。
2) if(a[i]==' '&&a[i+1]!=' ')
if(a[i+1]>='A'&&a[i+1]<='Z')
printf("%c",a[i+1]);
else
printf("%c",a[i+1]-32);
a[i+1] 有可能是等于 ‘\0’ ,比如字符串"a b ",i=3时,a[i]=' ',a[i+1]='\0',会执行 printf(“%c”,a[i+1]-32)
参考程序:
#include <stdio.h>
int main(int argc, char *argv[])
{
char str[2000];
int T;
scanf("%d",&T);
getchar();
int i,isStart;
while(T--)
{
gets(str);
for(i=0,isStart=1;str[i]!='\0';i++)
{
if(str[i] == ' ')
{
isStart = 1;
continue;
}
else
{
if(isStart)
{
if(str[i]>='A'&&str[i]<='Z')
{
printf("%c",str[i]);
}
else
{
printf("%c",str[i]-('a'-'A'));
}
isStart = 0;
}
}
}
printf("\n");
}
return 0;
}
2) if(a[i]==' '&&a[i+1]!=' ')
if(a[i+1]>='A'&&a[i+1]<='Z')
printf("%c",a[i+1]);
else
printf("%c",a[i+1]-32);
a[i+1] 有可能是等于 ‘\0’ ,比如字符串"a b ",i=3时,a[i]=' ',a[i+1]='\0',会执行 printf(“%c”,a[i+1]-32)
参考程序:
#include <stdio.h>
int main(int argc, char *argv[])
{
char str[2000];
int T;
scanf("%d",&T);
getchar();
int i,isStart;
while(T--)
{
gets(str);
for(i=0,isStart=1;str[i]!='\0';i++)
{
if(str[i] == ' ')
{
isStart = 1;
continue;
}
else
{
if(isStart)
{
if(str[i]>='A'&&str[i]<='Z')
{
printf("%c",str[i]);
}
else
{
printf("%c",str[i]-('a'-'A'));
}
isStart = 0;
}
}
}
printf("\n");
}
return 0;
}
展开全部
#include<stdio.h>
#include<string.h>
void main()
{
int ri,repeat,i,n;
char a[200];
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{
// m=0;
if(ri==1)
getchar();
gets(a);
n=strlen(a);
if(a[0]>='A'&&a[0]<='Z')
printf("%c",a[0]);
else if(a[0]>='a'&&a[0]<='z')
printf("%c",a[0]-32);
for(i=1;i<n;i++)
{
// if(a[i]==' '&&a[i+1]!=' ')
if(a[i-1]==' '&& a[i]!=' ')
// if(a[i+1]>='A'&&a[i+1]<='Z')
if(a[i]>='A'&&a[i]<='Z')
printf("%c",a[i]);
else
{
printf("%c",a[i]-32);
// m++;
// if(m>=9)
// break;
}
}
printf("\n");
}
}
可能有多个空格,这样改就可以过啦Accepted 2564 0MS 220K 771 B C++
#include<string.h>
void main()
{
int ri,repeat,i,n;
char a[200];
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{
// m=0;
if(ri==1)
getchar();
gets(a);
n=strlen(a);
if(a[0]>='A'&&a[0]<='Z')
printf("%c",a[0]);
else if(a[0]>='a'&&a[0]<='z')
printf("%c",a[0]-32);
for(i=1;i<n;i++)
{
// if(a[i]==' '&&a[i+1]!=' ')
if(a[i-1]==' '&& a[i]!=' ')
// if(a[i+1]>='A'&&a[i+1]<='Z')
if(a[i]>='A'&&a[i]<='Z')
printf("%c",a[i]);
else
{
printf("%c",a[i]-32);
// m++;
// if(m>=9)
// break;
}
}
printf("\n");
}
}
可能有多个空格,这样改就可以过啦Accepted 2564 0MS 220K 771 B C++
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询