!外国 大一 C++编程 作业,请中国同胞求助

如题,这次我们老师给的作业要求写出一个程序,会辨别“有效数字”(valid number)和“无效数字”(invalid number)

具体要求如下:
使用 DEV c++ 里面的菜单 excute>parameters,给程序输入两个值(如12,33,ab12或1.2),然后程序通过argc,argv[]功能去读取这两个数值,通过if,while或者其他指令辨别这两个数字是否有效。如果是有效的,程序会“cout<<”出“valid”。无效的数值就显示“invalid”。

老师批改时,会通过输入一下类似的数值

123
1,100

1.2.3
abc123
123abc

123, 5.6
456,7.8.9

++1
--3
5/2

当老师输入123或1,000时,电脑要cout<<"it is valid".(有效)
其余的数值,电脑要cout<<"it is invalid".(无效)

例如:
通过cmd运行文件 D:\Cyuyan.cpp 12 ab2
其中cyuyan.cpp 为文件名,12 和ab2为数值。窗口应该显示输出“invalid”,因为ab2不是有效数,不可以进行计算。

因为我们还是大一,希望用一些简单的代码。希望中国同胞们能帮帮忙,小弟无比感激。

附上我写的程序,不过是个失败品。
int main(int argc, char* argv[])
{
string j;
int i=0;

std::string str1 = argv[1];
cout << str1.length() << endl;

j=argv[1];

for(i=0; i<str1.length();i++)
{

if(!isdigit(argv[1][i]))
{cout<<"invalid"<<endl;}

else
{cout<<"valiad"<<endl;}
}

system("PAUSE");
return 0;
}

int main(int argc, char* argv[])
{
for (int c=1;c<argc;++c)
{
std::string str1 = argv[c];
for(int i=0; i<str1.length();i++)
{
if(!isdigit(str1[i]))
{cout<<"invalid"<<endl;}
else
{cout<<"valiad"<<endl;}
}
}

system("PAUSE");
return 0;
}追问

恩,差不多是这样了。但还数要调整一下,当输入1a2b3,需要输出一个invalid就够了。但是电脑却输出valid,invalid,valid,invalid,valid五个。

就是说,输入一个无效数值,只要输出一个“invalid”就对了。 ^_^

追答

哦,这个很好办呀
int main(int argc, char* argv[])
{
for (int c=1;c<argc;++c)
{
std::string str1 = argv[c];
for(int i=0; i<str1.length();i++)
{
if(!isdigit(str1[i]))
{
cout<<"invalid"<<endl;
system("PAUSE");
return 0;
}
else
{cout<<"valiad"<<endl;}
}
}

system("PAUSE");
return 0;
}

追问

^_^快好了,还差一点点,
当输入以下类型的,都属于valid,可提供计算
1.23
3,000
2e15(意思是2乘以10的15次方,2×10^15)

追答

int main(int argc, char* argv[])
{
for (int c=1;c<argc;++c)
{
bool hase=false;
std::string str1 = argv[c];
for(int i=0; i<str1.length();i++)
{
if(!isdigit(str1[i]))
{
if(str1[i] == 'e' || str1[i] == 'E')
{
if(!hase)
{
hase=true;
if(i<str1.length()-1)//e后面必须还要有数字,否则也是错的!!
continue;
}
}
cout<<"invalid"<<endl;
system("PAUSE");
return 0;
}
else
{cout<<"valiad"<<endl;}
}
}

system("PAUSE");
return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答