字符串转换成整型

题目:将字符串转换成整型,比如输入“123”,输出123。 

解题思路:

利用每一个0-9数字字符对应的Ascii减去48就得到了一个0-9的整型数字。用前i-1位表示的整型数字乘以10加上第i位表示的数字,就可以得到转换成的整型了。注意字符串第1个字符也可以是+或-。当字符串第1个字符是-时,用前i-1位表示的整型数字乘以10减去第i位表示的数字,就可以得到转换成的整型了。这样的话,还可以适用前面的数字有0的情况。比如输入“-0123”,输出-123。另外还有一个需要注意的地方就是溢出:字符串转换成的整型不能超过整型可以表示数字的范围。

int strToInt(char str[])
{
    int max = (1<<30)-1+(1<<30);//32位系统整型可以表示的最大数,之所以不直接用(1<<31)-1是因为在1<<31时整型溢出了,虽然只会报一个警告
	int min=(-1<<31);//32位系统整型可以表示的最小数
	int number=0;//number表示字符串转换成的整型,当无法转换时,会提醒并返回0
	if(str==NULL)//字符串为空时
	{
		printf("该字符串为空,无法转换成整型");
		return 0;
	}
	int n=0;
	while(str[n]!='\0')//遍历看字符串中是否有非法字符
	{
		if(n==0)//字符串中第1个字符可以是0-9的数字或+或-
		{
			if((str[n]>=48&&str[n]<=57)||str[n]=='+'||str[n]=='-')
			{

			}
			else
			{
				printf("该字符串无法转换成整型");
				return 0;
			}
		}
		else //字符串除第1个字符外,其他字符都必须是0-9
		{
			if(str[n]>57||str[n]<48)
			{
				printf("该字符串无法转换成整型");
				return 0;
			}
		}
		n++;
	}
	if(str[0]=='\0')//字符串为空串时
	{
		printf("该字符串为空串,无法转换成整型");
		return 0;
	}
	else if(str[0]=='+')//字符串第一个字符是+时
	{
		int i=1;
		while(str[i]!='\0')
		{
		    //判断所转换成的整型数字是否会溢出
			if(number>max/10)
			{
				printf("该字符串转换成整型会溢出,无法转换成整型");
				return 0;
			}
			else if(number==max/10)
			{
				if(str[i]-48>max%10)
				{
					printf("该字符串转换成整型会溢出,无法转换成整型");
					return 0;
				}
			}

			number=10*number+(str[i]-48);
			i++;
		}
		return number;
	}
	else if(str[0]=='-')
	{
		int i=1;
		while(str[i]!='\0')
		{
		    //判断所转换成的整型数字是否会溢出
			if(number<min/10)
			{
				printf("该字符串转换成整型会溢出,无法转换成整型");
				return 0;
			}
			else if(number==min/10)
			{
				if(-(str[i]-48)<min%10)
				{
					printf("该字符串转换成整型会溢出,无法转换成整型");
					return 0;
				}
			}

			number=10*number-(str[i]-48);
			i++;
		}
		return number;
	}
	else
	{
		int i=0;
		while(str[i]!='\0')
		{
		    //判断所转换成的整型数字是否会溢出
			if(number>max/10)
			{
				printf("该字符串转换成整型会溢出,无法转换成整型");
				return 0;
			}
			else if(number==max/10)
			{
				if(str[i]-48>max%10)
				{
					printf("该字符串转换成整型会溢出,无法转换成整型");
					return 0;
				}
			}
			number=10*number+(str[i]-48);
			i++;
		}
		return number;
	}

}
时间: 2024-10-20 09:24:37

字符串转换成整型的相关文章

字符串转换成整型并求和

设计思想:定义一个Scanner类型sc,定义一个String类型reader.然后将字符串读取 在定义i通过for循环将数组输出,然后将String类型的字符串转换成int型的整数,然后将其求和 再通过valueOf(sum)将整形转换成String类型输出其和. Scanner sc=new Scanner(System.in); System.out.println("输入字符串:");用这个程序将字符串输入 package demo;import java.util.*;pub

D Java中字符串转换成整型

字符串转换为整型 // //1.获取请求参数id String id = req.getParameter("id"); // //2.删除数据 bookService.deleteBookById(Integer.valueOf(id)); //======================================= //1.获取请求参数id Integer id = WebUtils.parseInt(req.getParameter("id"),0);

Android中字符串转换成整型

各种数字类型转换成字符串型: String s = String.valueOf( value);        // 其中 value 为任意一种数字类型. 字符串型转换成各种数字类型: String s = "169"; byte b = Byte.parseByte( s ); short t = Short.parseShort( s ); int i = Integer.parseInt( s ); long l = Long.parseLong( s ); Float f

编写一个字符串排序程序,对一个字符串的数值进行从小到大的排序,要求使用包装类对数值类型的字符串转换成整型进行排序

package cn.lyun.zzj; import java.util.Arrays; public class WrapperTest { private static final String SPACE_SEPARATOR = " "; //不可以放在一个类里面. public static void main(String[] args) { String numStr = "20 78 9 -7 88 36 29"; System.out.printl

atoi函数的使用(将字符串转换成整型数)

原型: int atoi(const char *nptr); 头文件:#include <stdlib.h> 简介 atoi(ascii to integer):是把字符串转换成整型数的一个函数.atoi( ) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等.--百度百科 栗子: #include<iostream> #include<stdio.h> #include<cstdlib> using namespace std;

linux c 网络编程:用域名获取IP地址或者用IP获取域名 网络地址转换成整型 主机字符顺序与网络字节顺序的转换

用域名获取IP地址或者用IP获取域名 #include<stdio.h> #include<sys/socket.h> #include<netdb.h> int main(int argc,char **aggv) { struct hostent *host; char hostname[]="www.163.com"; char hostname2[]="www.baidu.com"; struct in_addr in;

字符串问题----将整数字符串转换成整数值

将整数字符串转换成整数值 给定一个字符串str,如果str符合日常书写的规范,并属于32位整数的范围,返回str所代表的整数值,否则返回0.如 023, A13, 2147483648,均返回0. [解题思路] 定义四个变量,flag表示正负,res表示结果,minq表示最小值除以10的商,minr表示最小值除以10 的余数.因为最小值是 -2147483648,最大值是2147483647,负数有更大的范围,所以以负数的形式保留绝对值,最后根据flag进行修改. package com.tes

JS怎么把字符串数组转换成整型数组

比如有一个字符串: const dataStr="1,2,3,4,5"; 现在需要把它分割为int型数组: let dataIntArr=[1,2,3,4,5]; 方法有很多种.这里讲两个有意思的 let dataStr="1,2,3,4,5"; //原始字符串 let dataStrArr=dataStr.split(","); //分割成字符串数组 let dataIntArr=[];//保存转换后的整型字符串 //方法一 dataStrAr

C#中IPAddress转换成整型int

string addr = "11.22.33.44"; System.Net.IPAddress IPAddr=System.Net.IPAddress.Parse(addr); //网上的代码是得到字节组再转换成int byte[] byt = IPAddr.GetAddressBytes(); int intIP = System.BitConverter.ToInt32(byt, 0); Console.WriteLine("字节转换结果:{0}", int