找到字符串中的整数(小数)(带负号)

11 篇文章 0 订阅
8 篇文章 0 订阅
//找到字符串中的整数(带负号)
void findNum(string str, vector<int> &v){
	vector<char> vch;
	int p = 0, q = 0; //p是慢指针,p是快指针
	while (str[q] != '\0'){ //找到所有不是数字的字符
		if (!(str[q] - '0'<= 9 && str[q] - '0'>=0))
		{
			vch.push_back(str[q]);
		}
		q++;
	}
	q=0;
	while (str[q] != '\0')
	{
		vector<char>::iterator result = find( vch.begin( ), vch.end( ), str[q] ); //查找str[q]
		if (result != vch.end())
		{
		//if (str[q] == ',' || str[q] == '_' || str[q] == ' ' || str[q] == '-' || str[q] == '.')
			if (q>p)
			{
				string temp = str.substr(p,q-p);
				int temp_v = atoi(temp.c_str());

				if (str[p-1] == '-')
				{
					temp_v *=-1;
				}
				p=q+1;
				v.push_back(temp_v);		
			}
			else
			{
				p++;
			}

		}

		q++;
	}
	if (q>p) //最后面一个
	{
		string temp = str.substr(p,q-p);
		int temp_v = atoi(temp.c_str());

		if (str[p-1] == '-')
		{
			temp_v *=-1;
		}
		v.push_back(temp_v);		
	}
}
//找到字符串中的整数或者小数(带负号)
void findNum(string str, vector<float> &v){
	vector<char> vch;

	int k = 0; // 记录小数点的位置,用于小数字符串转数字
	int flag=false;//判断.是否是小数点
	int p = 0, q = 0;

	while (str[q] != '\0'){ //找到所有不是数字的字符
		if (!(str[q] - '0'<= 9 && str[q] - '0'>=0))
		{
			vch.push_back(str[q]);
		}
		q++;
	}
	q=0;
	while (str[q] != '\0')
	{
		vector<char>::iterator result = find( vch.begin( ), vch.end( ), str[q] ); //查找str[q]
		if (result != vch.end())
		{
			if (str[q] == '.')
			{
				if (q==0)//第一个就是.
				{
					p=q+1;
				}
				else{
					if ((str[q-1] - '0'<= 9 && str[q-1] - '0'>=0) && (str[q+1] - '0'<= 9 && str[q+1] - '0'>=0)) //.的前面与后面都是数字,代表是小数中的小数点
					{
						k = q;
						if (flag)
						{
							if (q>p)
							{
								if (k>p)
								{
									string temp_int = str.substr(p,k-p);
									string temp_float = str.substr(k+1,q-k);
									int temp_int1 = atoi(temp_int.c_str());
									int temp_float1 = atoi(temp_float.c_str());

									float temp_float2 = 1;
									for (int i = 0; i < q-k-1; i++)
									{
										temp_float2 *=0.1;
									}
									float temp_v = temp_int1 + temp_float1 * temp_float2;

									if (str[p-1] == '-')
									{
										temp_v *= -1;
									}
									p=q+1;
									v.push_back(temp_v);
								}
								else
								{
									string temp_int = str.substr(p,q-p);
									int temp_int1 = atoi(temp_int.c_str());
									if (str[p-1] == '-')
									{
										temp_int1 *= -1;
									}
									p=q+1;
									v.push_back(temp_int1);
								}			
								flag=false;
							}
							else
							{
								p++;
							}
						}
						flag = true;
					}
					else
					{
						p=q+1;
					}
				}

			}
			else
			{
				if (q>p)
				{
					if (k>p)
					{
						string temp_int = str.substr(p,k-p);
						string temp_float = str.substr(k+1,q-k);
						int temp_int1 = atoi(temp_int.c_str());
						int temp_float1 = atoi(temp_float.c_str());

						float temp_float2 = 1;
						for (int i = 0; i < q-k-1; i++)
						{
							temp_float2 *=0.1;
						}
						float temp_v = temp_int1 + temp_float1 * temp_float2;

						if (str[p-1] == '-')
						{
							temp_v *= -1;
						}
						p=q+1;
						v.push_back(temp_v);
					}
					else
					{
						string temp_int = str.substr(p,q-p);
						int temp_int1 = atoi(temp_int.c_str());
						if (str[p-1] == '-')
						{
							temp_int1 *= -1;
						}
						p=q+1;
						v.push_back(temp_int1);
					}			
					flag=false;
				}
				else
				{
					p++;
				}
			}
		}
		q++;
	}
	if (q>p)
	{
		if (k>p)
		{
			string temp_int = str.substr(p,k-p);
			string temp_float = str.substr(k+1,q-k);
			int temp_int1 = atoi(temp_int.c_str());
			int temp_float1 = atoi(temp_float.c_str());

			float temp_float2 = 1;
			for (int i = 0; i < q-k-1; i++)
			{
				temp_float2 *=0.1;
			}
			float temp_v = temp_int1 + temp_float1 * temp_float2;

			if (str[p-1] == '-')
			{
				temp_v *= -1;
			}
			p=q+1;
			v.push_back(temp_v);
		}
		else
		{
			string temp_int = str.substr(p,q-p);
			int temp_int1 = atoi(temp_int.c_str());
			if (str[p-1] == '-')
			{
				temp_int1 *= -1;
			}
			p=q+1;
			v.push_back(temp_int1);
		}			
		flag=false;
	}
}
//找到字符串中的整数或者小数(带负号)结果为字符串形式
void findNum(string str, vector<string> &v){
	vector<char> vch;

	int k; // 记录小数点的位置,用于小数字符串转数字
	int flag=false;//判断.是否是小数点
	int p = 0, q = 0;

	while (str[q] != '\0'){ //找到所有不是数字的字符
		if (!(str[q] - '0'<= 9 && str[q] - '0'>=0))
		{
			vch.push_back(str[q]);
		}
		q++;
	}
	q=0;
	while (str[q] != '\0')
	{
		vector<char>::iterator result = find( vch.begin( ), vch.end( ), str[q] ); //查找str[q]
		if (result != vch.end())
		{
			if (str[q] == '.')
			{
				if (q==0)//第一个就是.
				{
					p=q+1;
				}
				else{
					if ((str[q-1] - '0'<= 9 && str[q-1] - '0'>=0) && (str[q+1] - '0'<= 9 && str[q+1] - '0'>=0)) //.的前面与后面都是数字,代表是小数中的小数点
					{
						k = q;
						if (flag)
						{
							if (q>p)
							{
								string temp = str.substr(p,q-p);
								if (str[p-1] == '-')
								{
									temp = '-' + temp;
								}
								p=q+1;
								v.push_back(temp);		
								flag=false;
							}
							else
							{
								p++;
							}
						}
						flag = true;
					}
					else
					{
						p=q+1;
					}
				}

			}
			else
			{
				if (q>p)
				{
					string temp = str.substr(p,q-p);
					if (str[p-1] == '-')
					{
						temp = '-' + temp;
					}
					p=q+1;
					v.push_back(temp);			
					flag=false;
				}
				else
				{
					p++;
				}
			}
		}
		q++;
	}
	if (q>p)
	{
		string temp = str.substr(p,q-p);
		if (str[p-1] == '-')
		{
			temp = '-' + temp;
		}
		p=q+1;
		v.push_back(temp);		
		flag=false;	
	}
}
int main()
{
	string str; 
	vector<int> v1;
	vector<float> v2;
	vector<string> v3;
	getline(cin,str);
	findNum(str,v1);
	findNum(str,v2);
	findNum(str,v3);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值