/* 输入一个表示实数的字符串,把该字符串转换成实数并输出。 例如输入字符串"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; }