字符串转整型数字
Posted 做1个快乐的程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串转整型数字相关的知识,希望对你有一定的参考价值。
描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
返回值描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入:"+2147483647"
返回值:2147483647
示例2
输入:“1a33”
返回值:0
题目分析:1、首先需要明确的是,什么是合法的数值表达式,如果该字符串中含有任意字母,则表明该字符串不是合法的数值表达式;如果是合法的数值表达式,第一个字符是否是符号位,这是要进行判断的,如果是符号位,后面实际数值的长度则要减1。
2、在判断完以上的步骤后,就可以将字符转换为数字,并存储到事先准备的变量中,然后循环取出字符串中的每个数字。
解题
a:先写一个IsLetter函数,用来判断某个字符是否为字母,如果该字符串中的某个字符为字母,直接返回0即可,所以在函数的开始,先遍历一遍原字符串,如果有字母,则直接返回0。
b:如果函数继续往下走,则说明字符串中没有字母,是合法的数值表达式,此时要判断的是字符串中的第一个字符是否为符号位(+、-),我们这里设置一个标志位flag,如果字符串的第一个字符是+,则flag为1,如果第一个字符为-,则flag为-1,如果第一个字符不是标志位,则默认为正数,则flag保持为1。
c:定义ret、index、str_size三个变量用来存值或者记录信息,详细信息看代码注释。
d:进入for循环对每个字符的进行整型转换并作相应的处理。
class Solution {
public:
bool IsNumber(char ch)
{
if (ch >= '0' && ch <= '9')
return true;
else
return false;
}
//判断某个字符是否为字母
bool IsLetter(char ch)
{
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
return true;
else
return false;
}
int StrToInt(string str) {
//1、遍历该字符串,判断字符串中的每个字符是否是字母,如果有则直接返回0,如果不是,则继续往下走。
for(size_t i = 0; i < str.size(); i++)
{
if(IsLetter(str[i]))
return 0;
}
int ret = 0;//用来存储值
int flag = 1;//标志位,用来判断第一个字符是否为符号位
int index = 0;//用来记录下标,即此时应判断字符串中的第几个位置
int str_size = str.size();//str_size表示字符串的长度
//如果第一个字符是符号位'+',则将标志位置1,index++,表明在转整型的时候从字符串的第二个位置开始,
//然后将字符串有效字符的长度-1
if(str[index] == '+')
{
flag = 1;
index++;
str_size--;
}
//如果第一个字符是符号位'-',则将标志位置-1,index++,表明在转整型的时候从字符串的第二个位置开始,
//然后将字符串有效字符的长度-1
if(str[index] == '-')
{
flag = -1;
index++;
str_size--;
}
//代码运行到这里说明对第一个位置的判断已经完成,如果第一个位置是符号位,则遵循上面的结果,此时index为1,
//从字符串第二个位置开始工作,如果第一个位置不是符号位,此时index为0,仍从字符串第一个位置工作
for(size_t i = index; i < str.size(); i++)
{
//对每个是数字的字符进行操作,加不加这个if都可以,因为运行到这里已经是合法的数值表达式,加上是为了严谨
if(IsNumber(str[i]))
{
int number = str[i] - '0';
//用ret来记录每个位置的值相加的结果
//这里str_size的作用就体现出来了,每个位置转换位int类型的数字之后,与pow(10, str_size - 1)相乘,
//就是该位的实际值的大小,然后依次相加,并将str_size--即可
ret += (number * (pow(10, str_size - 1)));
str_size--;
}
}
//将算出的值与符号位相乘就是最后的答案
return ret * flag;
}
};
以上是关于字符串转整型数字的主要内容,如果未能解决你的问题,请参考以下文章