前几天去了先锋商泰面试,在面试时做了一个把输入的整数(例如:4238)重新排序成2348输出的题目。

由于自己没有准备充分,只是把功能写出来了。后来没有拿到offer。

今天在看《剑指offer》时,发现自己少了很多边界条件和错误的处理。在剑指offer这本书上有个题目:

题目:把一个字符串转换成整数。
下面是要注意的事项:不能只完成基本的要求,还要考虑最大整数和最小负整数以及溢出。以及当输入字符串不能转换成整数时,应该如何做错误处理。

我花了一些时间,写了下面这个程序,希望大家能一起交流,如果有问题,可以加以指正。谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int StrToInt(char *str);

int main(int argc, const char *argv[])
{
char *str;
int num = 0;
str = (char *)malloc(sizeof(char) * 100);//为指针申请堆空间
if(str == NULL)
{
perror("malloc");
exit(-1);
}
scanf("%s",str);//从终端接收字符数据
num = StrToInt(str);//调用函数
printf("this num is %d\n",num);
free(str);

return 0;
}

int StrToInt(char *str)
{
int num = 0;
int symbol = 1;
if( str == NULL )//检验是否为空指针
{
perror("str is null");
exit(-1);
}
if(*str == '-')//检验正负
{
symbol = -1;
str ++;
}
if(strlen(str) > 10 || strlen(str) == 10 && *str > '2')//检验输入的整数是否超过范围
{
perror("this integer is too big");
exit(-1);
}

while( *str != 0 )//如果字符串没有结束,则继续
{
if(*str >= 48 && *str <= 58 && symbol == 1)//如果字符是0~9且为正数
{
num = num * 10 + *str - '0';//加
++str;
}
else if (*str >= 48 && *str <= 58 && symbol == -1)//如果字符是0~9且为负数
{
num = num * 10 - *str + '0';//直接减
++str;
}
else//如果有非0~9的字符,则报错退出
{
perror("this is not a number");
exit(-1);
}
}

if( symbol == 1 )//看是否超过2147483647,若超过,则num变为负数(前面已经限定num的绝对值不超过3000000000)
{
if( num < 0 )
{
perror("is up overflow");
exit(-1);
}
}
if( symbol == -1 )//看是否超过-2147483648,若超过,则num变为正数(同上)
{
if( num > 0 )
{
perror("is down overflow");
exit(-1);
}
}
return num;//返回值
}

转载于:https://www.cnblogs.com/vonyao/p/3614334.html

关于把字符串整数转换成整数的程序相关推荐

  1. JAVA字符串怎么转换成整数

    首先你要确定你的字符串可以转换为int类型的,比如说: String s = "123"; 如果String s = "abc";则转换时会报错! 需要的包是& ...

  2. 把字符串转换成整数(2014年阿里巴巴实习生招聘面试题)

    题目:写一个strToInt函数,实现字符串str转换成整数num. 如何将字符串转换成整数,本文使用Java列出了三种方法: 1.利用java.lang.Integer类中的静态函数parseInt ...

  3. java浮点数化为整数_[Java教程]javascript浮点数转换成整数三种方法

    [Java教程]javascript浮点数转换成整数三种方法 0 2014-06-24 04:00:27 将浮点数转换成整数方法有很多,分享三种常用方法. Summary 暂时我就想到3个方法而已.如 ...

  4. oracle 转化为整数,字符串转换成整数——从源码学习

    字符串转换成整数:输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"345",则输出整数345. 在笔试面试中,atoi 即「字符串转换成整数」是一个经典问题了 ...

  5. 将十六进制的字符串转换成整数

    #include "stdafx.h" #include<stdio.h> #include<string.h>/*将大写字母转换成小写字母*/ int t ...

  6. python 字符串转换成整数

    | String to Int 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个 ...

  7. 程序员面试题精选100题(17)-把字符串转换成整数[算法]

    题目:输入一个表示整数的字符串,把该字符串转换成整数并输出.例如输入字符串"345",则输出整数345. 分析:这道题尽管不是很难,学过C/C++语言一般都能实现基本功能,但不同程 ...

  8. 判断字符为空_49. 把字符串转换成整数(剑指offer)

    49. 把字符串转换成整数 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0. 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输 ...

  9. 算法笔记_028:字符串转换成整数(Java)

    1 问题描述 输入一个由数字组成的字符串,请把它转换成整数并输出.例如,输入字符串"123",输出整数123. 请写出一个函数实现该功能,不能使用库函数. 2 解决方案 解答本问题 ...

最新文章

  1. 机器学习(MACHINE LEARNING)使用ARIMA进行时间序列预测
  2. 【通知】有三AI GPU平台上线新功能,GPU/CPU可灵活选择
  3. Maven for Eclipse 第二章 ——安装 m2eclipse插件
  4. AdlinkMotionCardLibrary函数C++
  5. Linux 设备驱动的固件加载
  6. mt6765和骁龙665哪个好_华为都把骁龙850用在了自家的win10设备上了,麒麟还会远吗?...
  7. xshell用ssh连接VMware中的ubuntu
  8. 团“模子”政策模式乱舞
  9. 网页聊天室php无数据库_无需数据库的PHP聊天室程序
  10. js调用android手写输入法,jQuery手写输入法代码
  11. java 判断时间24小时_Java 判断时间是否超过24小时
  12. 如何在 HTML 中调整图像大小?
  13. VFP开发微信、支付宝扫码支付
  14. 校园网状态下通过智能插座为ipad实现远程智能充电
  15. 关于经典面试一年多少秒的思考!启发#define与UL!整形常量的定义
  16. 实战项目:设计实现一个流程编排框架(实现)
  17. 实验 snort安装配置与规则编写
  18. 软件测试工程师求职踩过的坑——实战经验的分享啊
  19. 情绪分析,词性分析和词义消歧
  20. App/H5/小程序测试技术

热门文章

  1. 如何把自己的经历写成小说_*IT 项目经验:足迹第五十四步:梳理自己经历的几种项目框架与如何甄别项目使用的框架...
  2. jar java classpath_Java ClassLoader和ClassPath
  3. Matrix Differentiation(矩阵求导)以及矩阵求导常用公式
  4. leetcode —— 面试题36. 二叉搜索树与双向链表
  5. Python多重继承时属性的调用顺序
  6. Hibernate框架 一对多,多对多映射
  7. 离线排序——LR模型
  8. android+证书存储,Firefox for Android是否使用设备证书存储?
  9. 安装npm_微信小程序使用npm安装第三方库
  10. int** 赋值_一篇文章搞明白Integer、new Integer() 和 int 的概念与区别