现在的位置: 首页 > 综合 > 正文

输入一个表示实数的字符串,把该字符串转换成实数并输出

2013年10月11日 ⁄ 综合 ⁄ 共 1579字 ⁄ 字号 评论关闭
/*
输入一个表示实数的字符串,把该字符串转换成实数并输出。
例如输入字符串"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;
}

抱歉!评论已关闭.