字符串转换为整数”123“->123

字符串转换为整数”123“->123

题目描述:

输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"123",输出整数123。

给定函数原型
int StrToInt(const char *str)
,实现字符串转换成整数的功能,不能使用库函数atoi。

题目分析:

将字符串正确转化为整数步骤

①当扫描第一个字符‘1’时候,由于为第一位,所以直接得到数字1

②当扫描第二个字符‘2’时候,1*10+2 = 12

③继续扫描字符‘3’时候,12*10+3=123

所以就是n = n * 10 + c;

易错处:

1)不能为空指针,否则访问空指针时程序会崩溃if(str == NULL)return 0;

2)要考虑正负符号加入sign标记

3)要考虑非法字符,例如空格之类的while(isspace(*str)) ++str 还需要检测当为数字时,我们才开始转化

4)整型的溢出,如果输入一个很长很长的字符串,可能照成整型的溢出方法一、可以将n定义为long long型;方法二、利用定义MAX_INT 和 MIN_INT(对0右移取反),通过比较n和MAX_INT/10的大小

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

参考代码:

int StrToInt(const char *str)
{
    //对0取反再右移一位
    static const int MAX_INT = (int)((unsigned)~0 >> 1);
    static const int MIN_INT = -(int)((unsigned)~0 >> 1)-1;
    unsigned int n = 0;

    //判断是否为空
    if(str == NULL)
        return 0;
    //处理空格
    while(isspace(*str))
        ++str;

    //处理正负
    int sign = 1;
    if(*str == ‘+‘ || *str == ‘-‘)
    {
        if(*str == ‘-‘)
            sign = -1;
        ++str;
    }

    //确定数字后才开始转化
    while(isdigit(*str))
    {
        //处理溢出
        int c = *str - ‘0‘;
        if(sign > 0 && (n > MAX_INT/10 || (n == MAX_INT/10 && c > MAX_INT%10)))
        {
            n = MAX_INT;
            break;
        }
        else if(sign < 0 && (n > (unsigned)MIN_INT/10 || (n == (unsigned)MIN_INT/10 && c > (unsigned)MIN_INT%10)))
        {
            N = MIN_INT;
            break;
        }

        n = n * 10 + c;
        ++str;
    }
    return sign > 0 ? n : -n;
}

字符串转换为整数”123“->123,布布扣,bubuko.com

时间: 2024-10-19 01:11:00

字符串转换为整数”123“->123的相关文章

字符串转换为整数”123“-&amp;gt;123

字符串转换为整数"123"->123 题目描写叙述: 输入一个由数字组成的字符串.把它转换成整数并输出. 比如:输入字符串"123".输出整数123. 给定函数原型 int StrToInt(const char *str) .实现字符串转换成整数的功能.不能使用库函数atoi. 题目分析: 将字符串正确转化为整数步骤 ①当扫描第一个字符'1'时候,因为为第一位.所以直接得到数字1 ②当扫描第二个字符'2'时候,1*10+2 = 12 ③继续扫描字符'3'时候

编程算法 - 把字符串转换为整数 代码(C)

把字符串转换为整数 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 写一个函数StrToInt, 模拟atoi的功能, 把字符串转换为整数. 须要考虑异常处理, 正负数, 还有Int的最大值(0x7FFFFFFF)和最小值(0x80000000)等情况. 代码: /* * main.cpp * * Created on: 2014.7.12 * Author: spike */ #include <stdio.h> #include &l

关于将一个字符串转换为整数的问题

当我看到这么一个问题时,我觉得是一个很简单的问题,立刻就会想到用一个while循环遍历整个字符串,将一个个字符转化为数字,关于这种问题已经不是第一次遇到了,所以自信满满的写好然后去网上寻找答案. 这或许就是理想和现实的差距,把自己写的程序和标准答案一对,发现没有一个地方可以称之为写对.答案中提到了atoi函数,是一个把字符串转换为整数的库函数. 下面就是具体的实现: long long StrToIntCode(const char *ptr, bool minus) {     long lo

将一个字符串转换为整数。

T:实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数. 比如:输入字符串"1234",返回数字1234. 输入字符串"+1234",返回数字1234. 输入字符串"-1234",返回数字-1234. #include<stdio.h> #include<math.h> int my_atoi(char s[],int len) { char q; int i=0; int sum=0

c程序十六进制字符串转换为整数与反转

字符串转整数使用sscanf int value = 0; char *buf = "1d5ce"; sscanf (buf, "%x", &value); printf ("Hex value is:%x\n", value); 整数转字符串使用sprintf int num = 0; char buf[10] = {}; num = 120270; sprintf (buf, "%x", num); //打印 bu

字符串转换为整数

题目:输入一个表示整数的字符串,把该字符串转换成整数并输出. 例如输入字符串"345",则输出整数345. 分析:此题看起来,比较简单,每扫描到一个字符,我们把在之前得到的数字乘以10再加上当前字符表示的数字.这个思路用循环不难实现.然其背后却隐藏着不少陷阱,正如zhedahht 所说,有以下几点需要你注意: 1.由于整数可能不仅仅之含有数字,还有可能以'+'或者'-'开头,表示整数的正负.如果第一个字符是'+'号,则不需要做任何操作:如果第一个字符是'-'号,则表明这个整数是个负数,

把字符串转换为整数

注意问题: 1)字符串是空指针的情况. 2)假设输入的是一个空字符串"" 3)全部'0'到'9'之外的字符都是非法的吗?加号和减号是合法输入. 4) 考虑溢出 #include <iostream> using namespace std; bool g_value=false; int atoi(char * number){ if(number == NULL || *number=='\0'){ g_value=true; return 0; } double cou

【LintCode】转换字符串到整数

问题描述: 实现atoi这个函数,将一个字符串转换为整数.如果没有合法的整数,返回0.如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数. 样例 "10" =>10 "-1" => -1 "123123123123123" => 2147483647 "1.0" => 1 问题分析: 这道题特别恶心,虽然思路很

转换字符串到整数

转换字符串到整数 实现atoi这个函数,将一个字符串转换为整数.如果没有合法的整数,返回0.如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数. 样例 "10" =>10 "-1" => -1 "123123123123123" => 2147483647 "1.0" => 1 标签 字符串处理 基本实现 优步