一道OJ上的题

qq_33046541 2016-12-02 09:46:50
原题:http://codeup.cn/problem.php?cid=100000580&pid=1
题目描述
对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。
在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符('\t')、回车符('\r')、换行符('\n')。

输入
输入一行:待处理的字符串(长度小于100)。

输出
可能有多组测试数据,对于每组数据,
输出一行:转换后的字符串。

样例输入
if so, you already have a google account. you can sign in on the right.
样例输出
If So, You Already Have A Google Account. You Can Sign In On The Right.
我的代码如下,个人认为没问题但通不过,求指教:
#include<cstdio>
#include<cstring>
int main()
{
char szA[120];
int nLen;
int j;
while(gets(szA)!=NULL)
{
j=0;
nLen=strlen(szA);
if(szA[0]>=97&&szA[0]<=122)\\第一个字母单独判断
szA[0]-=32;
for(int i=0;i<nLen;i++)
{
if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
j=i;\\遇到指定符号记录
else if(j==i-1)
if(szA[i]>=97&&szA[i]<=122)
szA[i]-=32;\\若某个字母处于指定符号后且为小写,则转换为大写
}
puts(szA);
}
return 0;
}
...全文
158 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_33046541 2016-12-03
  • 打赏
  • 举报
回复
引用 7 楼 qq_36409192 的回复:
[quote=引用 6 楼 qq_33046541 的回复:] [quote=引用 5 楼 qq_36409192 的回复:] [quote=引用 4 楼 qq_33046541 的回复:] [quote=引用 2 楼 qq_36409192 的回复:] 应该是符号问题,你的符号可能是中文状态下输入的。
我本机运行可以,提交上去显示答案错误[/quote] 你的符号有问题,不能在中文输入的状态下输入符号,英文和中文这两种状态输出的符号是不同的。我帮你重新打了一遍,你再试试我这个打的。
#include <cstdio>
#include <cstring>
int main()
{
	char szA[120];
	int nLen;
	int j;
	while(gets(szA)!=NULL)
	{
		j=0;
		nLen=strlen(szA);
		if(szA[0]>=97&&szA[0]<=122)
			szA[0]-=32;
		for(int i=0;i<nLen;i++)
		{
			if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
				j=i;
			else if(j==i-1)
			if(szA[i]>=97&&szA[i]<=122)
				szA[i]-=32;
			puts(szA);
		}
		
	}
	return 0;
}
PS:如果符号的位置有问题,你自己稍微改下。[/quote]还是错误。。 [/quote] 程序有问题,我稍微改了下。
#include <cstdio>
#include <cstring>
#include <cctype> 
int main()
{
	char szA[120];
	int nLen;
	int j;
	while(gets(szA)!=NULL)
	{
		nLen=strlen(szA);
		if(szA[0]>=97&&szA[0]<=122)
			szA[0]-=32;
		for(int i=0;i<nLen;i++)
		{
			if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
			{
				if(szA[i+1]>=97&&szA[i+1]<=122)
				szA[i+1]-=32;
			}
		}
		puts(szA);
	}
	return 0;
}
[/quote]我原来的写法为什么错了呀?
ck2333 2016-12-03
  • 打赏
  • 举报
回复
引用 6 楼 qq_33046541 的回复:
[quote=引用 5 楼 qq_36409192 的回复:] [quote=引用 4 楼 qq_33046541 的回复:] [quote=引用 2 楼 qq_36409192 的回复:] 应该是符号问题,你的符号可能是中文状态下输入的。
我本机运行可以,提交上去显示答案错误[/quote] 你的符号有问题,不能在中文输入的状态下输入符号,英文和中文这两种状态输出的符号是不同的。我帮你重新打了一遍,你再试试我这个打的。
#include <cstdio>
#include <cstring>
int main()
{
	char szA[120];
	int nLen;
	int j;
	while(gets(szA)!=NULL)
	{
		j=0;
		nLen=strlen(szA);
		if(szA[0]>=97&&szA[0]<=122)
			szA[0]-=32;
		for(int i=0;i<nLen;i++)
		{
			if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
				j=i;
			else if(j==i-1)
			if(szA[i]>=97&&szA[i]<=122)
				szA[i]-=32;
			puts(szA);
		}
		
	}
	return 0;
}
PS:如果符号的位置有问题,你自己稍微改下。[/quote]还是错误。。 [/quote] 程序有问题,我稍微改了下。
#include <cstdio>
#include <cstring>
#include <cctype> 
int main()
{
	char szA[120];
	int nLen;
	int j;
	while(gets(szA)!=NULL)
	{
		nLen=strlen(szA);
		if(szA[0]>=97&&szA[0]<=122)
			szA[0]-=32;
		for(int i=0;i<nLen;i++)
		{
			if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
			{
				if(szA[i+1]>=97&&szA[i+1]<=122)
				szA[i+1]-=32;
			}
		}
		puts(szA);
	}
	return 0;
}
ck2333 2016-12-03
  • 打赏
  • 举报
回复
引用 10 楼 qq_33046541 的回复:
[quote=引用 9 楼 qq_36409192 的回复:] [quote=引用 8 楼 qq_33046541的回复:][quote=引用 7 楼 qq_36409192 的回复:] [quote=引用 6 楼 qq_33046541 的回复:] [quote=引用 5 楼 qq_36409192 的回复:] [quote=引用 4 楼 qq_33046541 的回复:] [quote=引用 2 楼 qq_36409192 的回复:] 应该是符号问题,你的符号可能是中文状态下输入的。
我本机运行可以,提交上去显示答案错误[/quote] 你的符号有问题,不能在中文输入的状态下输入符号,英文和中文这两种状态输出的符号是不同的。我帮你重新打了一遍,你再试试我这个打的。
#include <cstdio>
#include <cstring>
int main()
{
	char szA[120];
	int nLen;
	int j;
	while(gets(szA)!=NULL)
	{
		j=0;
		nLen=strlen(szA);
		if(szA[0]>=97&&szA[0]<=122)
			szA[0]-=32;
		for(int i=0;i<nLen;i++)
		{
			if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
				j=i;
			else if(j==i-1)
			if(szA[i]>=97&&szA[i]<=122)
				szA[i]-=32;
			puts(szA);
		}
		
	}
	return 0;
}
PS:如果符号的位置有问题,你自己稍微改下。[/quote]还是错误。。 [/quote] 程序有问题,我稍微改了下。
#include <cstdio>
#include <cstring>
#include <cctype> 
int main()
{
	char szA[120];
	int nLen;
	int j;
	while(gets(szA)!=NULL)
	{
		nLen=strlen(szA);
		if(szA[0]>=97&&szA[0]<=122)
			szA[0]-=32;
		for(int i=0;i<nLen;i++)
		{
			if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
			{
				if(szA[i+1]>=97&&szA[i+1]<=122)
				szA[i+1]-=32;
			}
		}
		puts(szA);
	}
	return 0;
}
[/quote]我原来的写法为什么错了呀? [/quote] 你把你写的自己试试就知道问题在哪里了。。[/quote] 我试过,样例可以通过啊[/quote] 我这边显示你把第一个单词的第二个字母也改成大写了,而且程序是否正确不能只用一组数组验证,你多试试。
qq_33046541 2016-12-03
  • 打赏
  • 举报
回复
引用 9 楼 qq_36409192 的回复:
[quote=引用 8 楼 qq_33046541的回复:][quote=引用 7 楼 qq_36409192 的回复:] [quote=引用 6 楼 qq_33046541 的回复:] [quote=引用 5 楼 qq_36409192 的回复:] [quote=引用 4 楼 qq_33046541 的回复:] [quote=引用 2 楼 qq_36409192 的回复:] 应该是符号问题,你的符号可能是中文状态下输入的。
我本机运行可以,提交上去显示答案错误[/quote] 你的符号有问题,不能在中文输入的状态下输入符号,英文和中文这两种状态输出的符号是不同的。我帮你重新打了一遍,你再试试我这个打的。
#include <cstdio>
#include <cstring>
int main()
{
	char szA[120];
	int nLen;
	int j;
	while(gets(szA)!=NULL)
	{
		j=0;
		nLen=strlen(szA);
		if(szA[0]>=97&&szA[0]<=122)
			szA[0]-=32;
		for(int i=0;i<nLen;i++)
		{
			if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
				j=i;
			else if(j==i-1)
			if(szA[i]>=97&&szA[i]<=122)
				szA[i]-=32;
			puts(szA);
		}
		
	}
	return 0;
}
PS:如果符号的位置有问题,你自己稍微改下。[/quote]还是错误。。 [/quote] 程序有问题,我稍微改了下。
#include <cstdio>
#include <cstring>
#include <cctype> 
int main()
{
	char szA[120];
	int nLen;
	int j;
	while(gets(szA)!=NULL)
	{
		nLen=strlen(szA);
		if(szA[0]>=97&&szA[0]<=122)
			szA[0]-=32;
		for(int i=0;i<nLen;i++)
		{
			if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
			{
				if(szA[i+1]>=97&&szA[i+1]<=122)
				szA[i+1]-=32;
			}
		}
		puts(szA);
	}
	return 0;
}
[/quote]我原来的写法为什么错了呀? [/quote] 你把你写的自己试试就知道问题在哪里了。。[/quote] 我试过,样例可以通过啊
ck2333 2016-12-03
  • 打赏
  • 举报
回复
引用 8 楼 qq_33046541的回复:
[quote=引用 7 楼 qq_36409192 的回复:] [quote=引用 6 楼 qq_33046541 的回复:] [quote=引用 5 楼 qq_36409192 的回复:] [quote=引用 4 楼 qq_33046541 的回复:] [quote=引用 2 楼 qq_36409192 的回复:] 应该是符号问题,你的符号可能是中文状态下输入的。
我本机运行可以,提交上去显示答案错误[/quote] 你的符号有问题,不能在中文输入的状态下输入符号,英文和中文这两种状态输出的符号是不同的。我帮你重新打了一遍,你再试试我这个打的。
#include <cstdio>
#include <cstring>
int main()
{
	char szA[120];
	int nLen;
	int j;
	while(gets(szA)!=NULL)
	{
		j=0;
		nLen=strlen(szA);
		if(szA[0]>=97&&szA[0]<=122)
			szA[0]-=32;
		for(int i=0;i<nLen;i++)
		{
			if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
				j=i;
			else if(j==i-1)
			if(szA[i]>=97&&szA[i]<=122)
				szA[i]-=32;
			puts(szA);
		}
		
	}
	return 0;
}
PS:如果符号的位置有问题,你自己稍微改下。[/quote]还是错误。。 [/quote] 程序有问题,我稍微改了下。
#include <cstdio>
#include <cstring>
#include <cctype> 
int main()
{
	char szA[120];
	int nLen;
	int j;
	while(gets(szA)!=NULL)
	{
		nLen=strlen(szA);
		if(szA[0]>=97&&szA[0]<=122)
			szA[0]-=32;
		for(int i=0;i<nLen;i++)
		{
			if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
			{
				if(szA[i+1]>=97&&szA[i+1]<=122)
				szA[i+1]-=32;
			}
		}
		puts(szA);
	}
	return 0;
}
[/quote]我原来的写法为什么错了呀? [/quote] 你把你写的自己试试就知道问题在哪里了。。
qq_33046541 2016-12-02
  • 打赏
  • 举报
回复
引用 5 楼 qq_36409192 的回复:
[quote=引用 4 楼 qq_33046541 的回复:] [quote=引用 2 楼 qq_36409192 的回复:] 应该是符号问题,你的符号可能是中文状态下输入的。
我本机运行可以,提交上去显示答案错误[/quote] 你的符号有问题,不能在中文输入的状态下输入符号,英文和中文这两种状态输出的符号是不同的。我帮你重新打了一遍,你再试试我这个打的。
#include <cstdio>
#include <cstring>
int main()
{
	char szA[120];
	int nLen;
	int j;
	while(gets(szA)!=NULL)
	{
		j=0;
		nLen=strlen(szA);
		if(szA[0]>=97&&szA[0]<=122)
			szA[0]-=32;
		for(int i=0;i<nLen;i++)
		{
			if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
				j=i;
			else if(j==i-1)
			if(szA[i]>=97&&szA[i]<=122)
				szA[i]-=32;
			puts(szA);
		}
		
	}
	return 0;
}
PS:如果符号的位置有问题,你自己稍微改下。[/quote]还是错误。。
ck2333 2016-12-02
  • 打赏
  • 举报
回复
引用 4 楼 qq_33046541 的回复:
[quote=引用 2 楼 qq_36409192 的回复:] 应该是符号问题,你的符号可能是中文状态下输入的。
我本机运行可以,提交上去显示答案错误[/quote] 你的符号有问题,不能在中文输入的状态下输入符号,英文和中文这两种状态输出的符号是不同的。我帮你重新打了一遍,你再试试我这个打的。
#include <cstdio>
#include <cstring>
int main()
{
	char szA[120];
	int nLen;
	int j;
	while(gets(szA)!=NULL)
	{
		j=0;
		nLen=strlen(szA);
		if(szA[0]>=97&&szA[0]<=122)
			szA[0]-=32;
		for(int i=0;i<nLen;i++)
		{
			if(szA[i]==' '||szA[i]=='\t'||szA[i]=='\r'||szA[i]=='\n')
				j=i;
			else if(j==i-1)
			if(szA[i]>=97&&szA[i]<=122)
				szA[i]-=32;
			puts(szA);
		}
		
	}
	return 0;
}
PS:如果符号的位置有问题,你自己稍微改下。
qq_33046541 2016-12-02
  • 打赏
  • 举报
回复
引用 2 楼 qq_36409192 的回复:
应该是符号问题,你的符号可能是中文状态下输入的。
我本机运行可以,提交上去显示答案错误
qq_33046541 2016-12-02
  • 打赏
  • 举报
回复
引用 2 楼 qq_36409192 的回复:
应该是符号问题,你的符号可能是中文状态下输入的。
什么意思。。。
ck2333 2016-12-02
  • 打赏
  • 举报
回复
应该是符号问题,你的符号可能是中文状态下输入的。
ck2333 2016-12-02
  • 打赏
  • 举报
回复
while(gets(szA)!=NULL)就意味着你会循环输入szA字符串
BNUEP Offline Judge 北京师范大学珠海分校离线评测系统是在具备目测试数据的情况下,能无联网自动评测ACM/ICPC模式的源代码评测系统(即本地测试工具、评测机)。它主要有以下功能(所有的功能都无需联网,在本机即可实现): *评测核心功能: 基本具备Online Judge的判核心功能,如编译代码、内存限定,时间限定,获取代码长度等; *支持多种语言: 1.0 Beta2版本支持C/C++、Pascal、C#、JAVA; *出模式 可以在有标准输入数据和标准程序的情况下,由系统产生标准输出数据,并可批量保存,同时自动命名标准输出数据的后缀; *文本高亮对比 在判后,可以直接在本系统中将自己的程序输出和标准输出进行高亮的文本差异对比,操作类似于一些文本对比软件,在一定程度上可以较方便地发现WA代码的出错细节; *支持不限时执行代码 这个功能可以在一定程度上检测TLE代码的算法是否正确的,当然,不能是跑一天都没跑出来的程序; *打包与加密测试数据 使用加密后的数据可以正常判,但不显示标准输出。这个功能是为了弥补放出去给别人评测的测试数据是明文的缺陷。加密之后评测方就看不到测试数据。这样就既可以实现离线评测,又可以实现Online Judge上的对测试数据屏蔽; ACM-ICPC简介: ACM国际大学生程序设计竞赛(简称ACM-ICPC)是由国际计算机界具有悠久历史的权威性组织ACM学会(Association for Computing Machinery)主办,是世界上公认的规模最大、水平最高、参与人数最多的大学生程序设计竞赛,其宗旨是使大学生能通过计算机充分展示自己分析问和解决问的能力。 ACM-ICPC的每一道,都具备目、需求描述、输入格式描述、输出格式描述、样例输入和样例输出共六大信息,有些目还有一定的提示。此外,裁判还额外存储了关于该的一组或多组对选手屏蔽的标准输入和标准输出数据,这些测试数据已经经过验证符合意要求。当用户提交一道目的源码之后,裁判会将该源码放入评测系统中编译运行,并使用标准输入作为用户程序的输入,然后获取用户程序的输出,接着,将用户程序输出和标准输出比较,最后返回给用户一个评判结果。评判结果包括:Accepted(测试通过)、Compile Error(编译失败)、Memory Limit Exceed(内存超出限制)、Presentation Error(格式错误)、Runtime Error(运行时错误,可能是数组越界,改写只读的内存,除零,栈或堆溢出等错误)、Time Limit Exceed(时间超出限制)、Wrong Answer(答案错误)等。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧