/*
输入一个表示实数的字符串,把该字符串转换成实数并输出。
例如输入字符串"34.5",则输出整数34.5。
*/
#include <iostream>
#include <iomanip>
#include <limits>
using namespace std;
int main(int argc, char** argv)
{
// 需要输入字符串
if(argc < 2)
return -1;
// 计算串长度
int sz = 0;
char* p = argv[1];
while(*p != '\0')
{
sz +=1;
++p;
}
int points = 0; // 小数点数目
bool real = false; // 计算小数部分标志
double base = 0.1;
char numstr[16];
double val=0;
bool flag = true;
cout << "string size : " << sz << endl;
memcpy(numstr,argv[1],sz);
if(numstr[0] == '+'){ // 正实数
flag = true;
int i;
for(i = 1; i<sz; ++i){
if((numstr[i] >= '0' && numstr[i] <= '9') || (numstr[i] == '.' && points < 1 )){
if(numstr[i] == '.'){
points += 1;
real = true;
}else{
if(!real){
val = val*10 + (numstr[i] - '0');
}else{
val = val + (numstr[i] - '0') * base;
base *= 0.1;
}
}
}else{
break;
}
}
if(i<sz) {
cerr << "wrong input string, can not be translate to a number!\n";
return -1;
}
}else if(numstr[0] == '-'){ // 负实数
flag = false;
int i;
for(i = 1; i<sz; ++i){
if((numstr[i] >= '0' && numstr[i] <= '9') || (numstr[i] == '.' && points < 1 )){
if(numstr[i] == '.'){
points += 1;
real = true;
}else{
if(!real){
val = val*10 + (numstr[i] - '0');
}else{
val = val + (numstr[i] - '0') * base;
base *= 0.1;
}
}
}else{
break;
}
}
if(i<sz) {
cerr << "wrong input string, can not be translate to a number!\n";
return -1;
}
val = val* (-1);
}else if(numstr[0] >= '0'&& numstr[0] <= '9'){ // 无符号, 正实数
int i;
for(i = 0; i<sz; ++i){
if((numstr[i] >= '0' && numstr[i] <= '9') || (numstr[i] == '.' && points < 1 )){
if(numstr[i] == '.'){
points += 1;
real = true;
}else{
if(!real){
val = val*10 + (numstr[i] - '0');
}else{
val = val + (numstr[i] - '0') * base;
base *= 0.1;
}
}
}else{
break;
}
}
if(i<sz) {
cerr << "wrong input string, can not be translate to a number!\n";
return -1;
}
}else{
cerr << "wrong input string, can not be translate to a number!\n";
return -1;
}
cout << "translated number : " << setprecision(sz) << val <<endl;
return 0;
}
输入一个表示实数的字符串,把该字符串转换成实数并输出
最新推荐文章于 2022-09-17 22:25:27 发布