一道程序设计题目,高手帮帮忙吧

DescriptionC语言中的10进制整数常量定义如下(不是严格的C定义,有简化):1)常量的开头可以有“+”或“-”号,也可以没有;2)至少有一位数字位,除非数字为0... Description
C语言中的10进制整数常量定义如下(不是严格的C定义,有简化):

1) 常量的开头可以有“+”或“-”号,也可以没有;

2) 至少有一位数字位,除非数字为0,否则第一个数字必须为1到9的数字;

3) 如果有符号的话,符号与数字之间可以有0个或多个空格。

4) 常量的前后可能会有若干空格。

请写一个程序判断给定的整数是否符合这个定义。

输入
每个样例一行,每行表示一个整数,字符长度不超过20;

输出
每行输出一个样例的结果,如果符合定义输出“Yes”,否则输出“No”

Sample Input
-123
5F

Sample Output
Yes
No

+++++++++++++++++++++++++++++++++++++++++++++++++++++
下面是我写的

#include<iostream>
using namespace std;
int main()
{

char a[20];
while(1)
{
int di=0;
int len;
gets(a);
int i=0;//记录位置
len=strlen(a);//获取a的长度
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,i++,跳过空格

if(a[i]=='+'||a[i]=='-')
{
i++;
}//有符号,跳过符号。

if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,跳过空格。

while(a[i]!=' '&&a[i]!='\0')
{
if(a[i]<'0'||a[i]>'9')
{
di++;
break;
}//排除非数字
if(a[i]=='0')
{
if(a[++i]==' ')
{
while(a[i]==' ')
i++;
}
break;

}//等于0的特殊情况;

i++;
}//检验数字部分,DI为标志位

if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//i应该到达底部
if(di!=0)
{
cout<<"No"<<endl;

}
else
if(len==i)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;

}
return 0;
}

这个代码有问题,帮忙修改一下,就是对于XX00(后面有多个零的数字,X为1-9的数字),不能正确判断。
展开
 我来答
porker2008
2011-05-23 · TA获得超过1.4万个赞
知道大有可为答主
回答量:7066
采纳率:62%
帮助的人:1.2亿
展开全部
#include<iostream>
using namespace std;
int main()
{
char a[20];
while(1)
{
int di=0;
int len;
gets(a);
int i=0;//记录位置
len=strlen(a);//获取a的长度
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,i++,跳过空格
if(a[i]=='+'||a[i]=='-')
{
i++;
}//有符号,跳过符号。
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,跳过空格。
bool leadingzero = true;
int legalzero = 0;
while(a[i]!=' '&&a[i]!='\0')
{
if(a[i]<'0'||a[i]>'9')
{
di++;
break;
}//排除非数字
if(a[i]=='0'&&leadingzero)
{
legalzero = 1;
}//等于0的特殊情况;
else if(legalzero == 1)
{
legalzero = 2;
}
leadingzero = false;
i++;
}//检验数字部分,DI为标志位
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//i应该到达底部
if(di!=0)
{
cout<<"No"<<endl;
}
else if(legalzero==2)
cout <<"No"<<endl;
else if(len==i)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
追问
不能AC ,
提示答案错误
追答
#include
using namespace std;
int main()
{
char a[20];
while(1)
{
int di=0;
int len;
gets(a);
int i=0;//记录位置
len=strlen(a);//获取a的长度
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,i++,跳过空格
if(a[i]=='+'||a[i]=='-')
{
i++;
}//有符号,跳过符号。
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,跳过空格。
bool leadingzero = true;
int legalzero = 0;
while(a[i]!=' '&&a[i]!='\0')
{
if(a[i]'9')
{
di++;
break;
}//排除非数字
if(a[i]=='0'&&leadingzero)
{
legalzero = 1;
}//等于0的特殊情况;
else if(legalzero == 1)
{
legalzero = 2;
}
leadingzero = false;
i++;
}//检验数字部分,DI为标志位
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//i应该到达底部
if(di!=0)
{
cout<<"No"<<endl;
}
else if(leadingzero)
cout << "No" << endl;
else if(legalzero==2)
cout <<"No"<<endl;
else if(len==i)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
百度网友a3722676e
2011-05-23 · TA获得超过1216个赞
知道小有建树答主
回答量:957
采纳率:0%
帮助的人:923万
展开全部
#include<iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{

char a[20];

while(1)
{
int di=0;
int len;
int bit = -1;
gets(a);
int i=0;//记录位置
len=strlen(a);//获取a的长度
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,i++,跳过空格

if(a[i]=='+'||a[i]=='-')
{
i++;
}//有符号,跳过符号。

if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,跳过空格。

while(a[i]!=' '&&a[i]!='\0')
{
if(a[i]<'0'||a[i]>'9')
{
di++;
break;
}//排除非数字
if(a[i]=='0' && bit == -1)
{
if(a[++i]==' ')
{
while(a[i]==' ')
i++;
}
break;

}//等于0的特殊情况;
else
{
if (bit == -1)
bit = i;
}
i++;
}//检验数字部分,DI为标志位

if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//i应该到达底部
if(di!=0)
{
cout<<"No"<<endl;
continue;
}
else
if(len==i)
cout<<"Yes"<<endl;
else
{
if (bit < i)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
return 0;
}

-------------------以下是测试结果----------------------------------
2000
Yes
2000 0
No
20000
Yes
- 20000
Yes
- 2000 2
No
2000 b
No
- 2000 b
No
2000b
No
2000
Yes
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式