在字符串中提取首个整数并区分正负 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

在字符串中提取首个整数并区分正负

发表时间:2020-10-19

发布人:葵宇科技

浏览次数:34

在字符串中提取首个整数并区分正负

// 字符串转数值.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include"conio.h"
int convert(char* arr)
{
	int i, j, k;
	int m = 0;//用于记录数字的真实位数
	int n = 0;//用于记录需要输出的数字从字符串的第几位开始记录位数
	int F = 0;
	int  A, count = 0, B = 0;
	while (arr[count] != '\0')//用于计算字符串的位数
		count++;
	//printf("count is %d\n", count);
	for (i = 0; i < count; i++)
	{
		if ((int)arr[i] == 45 && (int)arr[i + 1] > 47 && (int)arr[i + 1] < 58)//判断这个数是否为负数并标记
		{
			n++;
			F = 1;
			continue;
		}
		if ((int)arr[i] < 48 || (int)arr[i]>57)//记录需要输出的数字从第几位开始
		{
			n++;
			continue;
		}
		if ((int)arr[i] > 47 && (int)arr[i] < 58 && (int)arr[i + 1] > 47 && (int)arr[i + 1] < 58)//记录需要输出的数字的位数
			m++;
		if ((int)arr[i] > 47 && (int)arr[i] < 58 && ((int)arr[i + 1] < 48 || (int)arr[i + 1]>57))//记录需要输出的数字的位数并标记需要输出的数字是否即将结束
		{
			m++;
			break;
		}
	}
	//printf("%d\n", n);
	//printf("%d\n", F);
	//printf("%d\n", m);
	k = m - 2;
	for (i = n; i < n + m; i++)//利用n与n+m确定在数组的哪里开始检索需要输出数字,在哪里结束。
	{
		A = 1;
		if (i != n + m - 1)
		{
			for (j = k; j >= 0; j--)
				A *= 10;
			//printf("%d\n", A);
			B += A * ((int)arr[i] - 48);
		}
		else
			B += A * ((int)arr[i] - 48);
		k--;
	}
	if (F == 1)
		return -B;
	return B;
}
int main()
{
	char arr[] = "***-012-345";
	printf("%d\n", convert(arr));
	_getch();
	return 0;
}

相关案例查看更多