字符串编程之与整数的互换

原创 2016年06月01日 20:53:10

字符串转整数

#define Max_int 21474836747
#define Min_int  (-214748364-1)
int strToint(const char* str)
{

    if (nullptr == str || str == '\0')
        return 0;
    for (; isspace(*str); str++);//将前面的空格省去
    bool neg = false;//判断是否有正负号
    if (*str=='-'||*str=='+')
    {
        neg = (*str == -'-');//即等于-的时候另neg=true
        str++;//然后移动指针
    }
    int result=0;
    for (; isdigit(*str); str++)//如果是数字的话
    {
        int digit = (*str - '0');//转换成数字
        if (neg)//如果为负数的话
        {
            if (-result < (Min_int + digit) / 10)
                return Min_int;
        }
        else 
        {
            if (result > (Max_int + digit) / 10)
            return Max_int;
        }
        result = 10 * result + digit;   
    }
    return neg ? -result : result;//若为负数则加上负号
}
//测试
int main(int argc, char*argv) 
{
    printf("\"%s\" = %d\n", "123", strToint("123"));
    printf("\"%s\" = %d\n", "   123", strToint("    123"));
    printf("\"%s\" = %d\n", "+123", strToint("+123"));
    printf("\"%s\" = %d\n", " -123", strToint(" -123"));
    printf("\"%s\" = %d\n", "123ABC", strToint("123ABC"));
    printf("\"%s\" = %d\n", " abc123ABC", strToint(" abc123ABC"));
    printf("\"%s\" = %d\n", "2147483647", strToint("2147483647"));
    printf("\"%s\" = %d\n", "-2147483648", strToint("-2147483648"));
    printf("\"%s\" = %d\n", "2147483648", strToint("2147483648"));
    printf("\"%s\" = %d\n", "-2147483649", strToint("-2147483649"));
    return 0;
}

整数转成字符串

char* intToStr(int n)
{
    int temp = n < 0 ? -n : n;//temp为n的绝对值
    char buf[10] = { 0 };
    int len = 0; int i = 0;
    while (temp)//用while比较好
    {
        buf[i++] = (temp % 10) + '0';//从最低为开始存
        temp = temp / 10;//写一个数字看看即可
    }
    //注意int有正负之分
    len = n < 0 ? ++i : i;
    char *str = new char[i+1];//加上正负号共有i+1位,因为有\0
    str[i] = '\0';//结束符
    while (1)
    {
        i--;
        if (buf[len - i - 1] == 0)//1,2,3,4,buf[4]=0,即i=-1
            break;
        str[i] = buf[len - i - 1];//若为1234,则str[3]=buf[0];
    }
    if (i == 0)
        str[i] = '-';//说明有负号
    return str;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

《编程之美》- 3.3 - 计算字符串相似度 即 最小编辑距离问题

题目 3.3计算字符串的相似度 许多程序会大量使用字符串,对于不同的字符串,我们希望能够有办法判断其相似程度。定义下列操作方法使得两个不同的字符串变得相同: 修改一个字符(如把‘a’改为...
  • fly_yr
  • fly_yr
  • 2016年05月24日 20:07
  • 714

编程之美1:那些关于1的个数的经典面试题

那些关于1的个数的经典面试题好长时间没有练算法了,笔试题一做,发现非常吃力,所以近日来找来《编程之美》一书来看看练练。为了激励自己多练,楼楼可能会出个专栏什么的,感兴趣的同学我们可以一起抱团,楼楼也会...
  • XIAXIA__
  • XIAXIA__
  • 2015年04月09日 12:02
  • 2778

java编程之美(一)

实践编程已经有足足6年多时间,也算是有一定经验,经常在工作中遇到各种让人不爽的代码编写方式,今天忍不住要来唠叨下。 为什么叫编程之美? 在我看来,代码有丑陋难看和赏心悦目两类,当然还有介于两者之...
  • tang9140
  • tang9140
  • 2015年11月01日 18:28
  • 1029

编程之美3.1 字符串移位包含问题

这道题目的意思是给定一个字符串,作为源字符串,之后给出其他的字符串,确定源字符串是否能够经过旋转而得到给定的字符串,即移位包含问题。      假如,给定一个字符串 abcdefg,接着给定字符串 c...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2014年10月17日 19:02
  • 1254

编程之美之扩展问题

参考链接:http://blog.csdn.net/wuyuegb2312/article/details/9896831 1.1 让CPU占用率曲线听你指挥 参考: http://blog.csd...
  • jerryzcx
  • jerryzcx
  • 2014年03月06日 23:33
  • 2515

[编程之美-10]面试当中的智力题(不定期更新)

[版权说明]  编程之美系列算法题集参考:  左程云 著《程序员代码面试指南IT名企算法与数据结构题目最优解》  July 著《编程之法面试和算法心得》  何海涛 著《剑指offer》  微软编程之美...
  • caicaiatnbu
  • caicaiatnbu
  • 2017年06月07日 23:44
  • 383

2014-04-19编程之美初赛题目及答案解析

第一题: 描述 一般来说,我们采用针孔相机模型,也就是认为它用到的是小孔成像原理。 在相机坐标系下,一般来说,我们用到的单位长度,不是“米”这样的国际单位,而是相邻像素的长度。而焦距...
  • kunlong0909
  • kunlong0909
  • 2014年04月19日 16:44
  • 4453

剑指offer-整数中1出现的次数(从1到n整数中1出现的次数)

整数中1出现的次数(从1到n整数中1出现的次数) 求出1 ~ 13的整数中1出现的次数,并算出100 ~ 1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、1...
  • huzhigenlaohu
  • huzhigenlaohu
  • 2016年06月28日 22:34
  • 2847

编程之美2.18—数组分割

题目: 有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。 基本思想: 假设数组A[1..2N]所有元素的和是SUM。模仿动...
  • wtyvhreal
  • wtyvhreal
  • 2015年04月28日 11:37
  • 678

《编程之美》学习笔记——指挥CPU占用率

问题: 写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率(单核)。有以下几种情况: 1.CPU占用率固定在50%,为一条直线 2.CPU的占用率为一条直线,具...
  • lyh03601
  • lyh03601
  • 2014年09月28日 15:07
  • 1163
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串编程之与整数的互换
举报原因:
原因补充:

(最多只允许输入30个字)