☆ C++实现字符串到整形数的转换

(whitespace)[digits]

其中(whitespace)表示可以有0个、1个或多个前导空格,

表示可以有0个或1个“±”符号字符,

[digits]表示至少有1个[‘0’~‘9’]之间的数字字符,允许数字以’0’开始。

sign和第一个数字字符之间无空格,各数字字符之间也无空格。



* VS去除警告方法

#define _CRT_SECURE_NO_WRANINGS

#pragma warning (disable : 4545)


源码:

// C++字符串的转换.cpp : 定义控制台应用程序的入口点。
//'0-9': 48-57

#include 
#include 
using namespace std;

int Strtoint(const char str[])  //字符串数字转换为整形
{
	int i = 0,j = 0;
	long long number1 = 0;    //定义一个长整形变量,用来存储转换后得到的值
	int number[50] = { 0 };    //定义一个数组,用来存储转换后得到的值
	int symbol = 0;    //符号常量,0为负,1为正(默认为负)
	while(str[i]!='\0')	  //测试输出判断是否正确
	{	
		while (str[i] == ' ')
		{
			i++;
		}
		 if ((str[i] == '+' || str[i] == '-'))
		{
			i++;
			if (str[i] == '+')
			{
				symbol = 1;
			}
		}
		else if (str[i]<'9' && str[i]>'0')
		{
			number[j++] = str[i]-48;    //存储数据,j++
//			cout << number[j - 1] << endl;
			i++;
		}
		if(str[i]>'9' || str[i]<'0')    //停止输出规则判断语句
		{
			break;
		}	
	}
	cout << "数的位数为:" << j << endl;    //j到这里就已经得到数组的最大索引值+1了
	int x = 1;
	for (int k = j - 1; k>=0 ; k--,x = x*10)
	{
		number1 += number[k] * x;
	}
	if (symbol == 0)
	{
		number1 = number1*(-1);
	}
	cout << "转换后的数为:" << number1 << endl << endl;
	return 1;
}

int main()
{
	system("title 字符串的转换");
	char arr[50] = {0};
	char c;
	int i = 0;
	cout << "Please input the string :" << endl;
	while ((c = getchar() )!= '\n')
	{
		arr[i++] = c;	//注意这里下面的i就开始++了
	}
/*	
	while ((c = cin.get()) != '\n')    //另一种控制输入的方法
	{
		arr[i++] = c;
		cout << arr[i - 1];
	}
*/
	Strtoint(arr);
    return 0;
}

运行结果:

  ☆ C++实现字符串到整形数的转换_第1张图片


 



显示优化:

☆ C++实现字符串到整形数的转换_第2张图片

源码:

// C++上机作业.cpp : 定义控制台应用程序的入口点。
//'0-9': 48-57

#include "iostream"
#include 
using namespace std;

void gotoxy(int x, int y)
{
	COORD pos = { x,y };
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOut, pos);
}

int Strtoint(const char str[])  //字符串数字转换为整形
{
	int i = 0,j = 0;
	long long number1 = 0;    //定义一个长整形变量,用来存储转换后得到的值
	int number[50] = { 0 };    //定义一个数组,用来存储转换后得到的值
	int symbol = 1;    //符号常量,0为负,1为正(默认为正)
	while(str[i]!='\0')	  //测试输出判断是否正确
	{	
		while (str[i] == ' ')
		{
			i++;
		}
		 if ((str[i] == '+' || str[i] == '-'))
		{
			i++;
			if (str[i] == '-')
			{
				symbol = 0;
			}
		}
		else if (str[i]<'9' && str[i]>'0')
		{
			number[j++] = str[i]-48;    //存储数据,j++
//			cout << number[j - 1] << endl;
			i++;
		}
		if(str[i]>'9' || str[i]<'0')    //停止输出规则判断语句
		{
			break;
		}	
	}
	cout << "数的位数为:" << j << endl;    //j到这里就已经得到数组的最大索引值+1了
	int x = 1;
	for (int k = j - 1; k>=0 ; k--,x = x*10)
	{
		number1 += number[k] * x;
	}
	if (symbol == 0)
	{
		number1 = number1*(-1);
	}
	cout << "转换后的数为:" << number1 << endl << endl;
	return 1;
}

int aaa()    //调用字符转换函数,确保变量不在主函数中定义
{
	char arr[50] = { 0 };
	int i = 0;
	char c;
	cout << "Please input the string :" << endl;
	while ((c = getchar()) != '\n')
	{
		arr[i++] = c;	//注意这里下面的i就开始++了
	}
	/*
	while ((c = cin.get()) != '\n')    //另一种控制输入的方法
	{
	arr[i++] = c;
	cout << arr[i - 1];
	}
	*/
	Strtoint(arr);
	return 0;
}

int main()
{
	system("title 功能主函数");
	gotoxy(23, 2); cout << "功能列表";
	gotoxy(15, 3); cout << "1:字符串转换为数值类型";

	gotoxy(0, 10);

	int choice = 0;
	cout << "请输入您要执行的功能:";
	cin >> choice;
	getchar();    //吸收回车
	switch (choice)
	{
		case 1:
			aaa();
			break;
		default:
			cout << "选择失败,感谢使用,再见!" << endl << endl;
	}
		
    return 0;
}

 

 

 

 


             最快的脚步不是跨越,而是继续,最慢的步伐不是小步,而是徘徊。


 

你可能感兴趣的:(☆ C++实现字符串到整形数的转换)