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

当我看到这么一个问题时,我觉得是一个很简单的问题,立刻就会想到用一个while循环遍历整个字符串,将一个个字符转化为数字,关于这种问题已经不是第一次遇到了,所以自信满满的写好然后去网上寻找答案。

这或许就是理想和现实的差距,把自己写的程序和标准答案一对,发现没有一个地方可以称之为写对。答案中提到了atoi函数,是一个把字符串转换为整数的库函数。

下面就是具体的实现:

long long StrToIntCode(const char *ptr, bool minus)
{
    long long num = 0;
    while (*ptr != ‘\0‘)
    {
        if (*ptr >= ‘0‘ && *ptr <= ‘9‘)
        {
            int flag = minus ? -1 : 1;
            num = num * 10 + flag*(*ptr - ‘0‘);
            if ((!minus && num > 0x7FFFFFFF)                 || (minus && num < (signed int)0x80000000))/*判断是否上溢出或者上溢出*/
            {
                num = 0;
                break;
            }
            ptr++;
        }
        else
        {
            num = 0;
            break;
        }
    }
    if (*ptr == ‘\0‘)
    {
        sign = v_normal;
    }
    return num;
}

int StrToInt(const char *ptr)
{
    sign = v_error;
    long long num = 0;
    if (ptr != NULL && *ptr != ‘\0‘)
    {
        bool minus = false;
        if (*ptr == ‘+‘)
        {
            ptr++;
        }
        else if (*ptr == ‘-‘)
        {
            ptr++;
            minus = true;
        }
        if (*ptr != ‘\0‘)
        {
            num = StrToIntCode(ptr, minus);
        }

    }
    return (int)num;
}

一开始进入StrToInt函数先判断字符串是否为空,若字符串为空,则直接返回非法输入。

enum state
{
    v_normal = 0,//正常
    v_error//非法
};

int sign = v_error;/*设置全局变量判断是否为非法输入*/

不为空并且第一个字符不为‘\0’,则分情况第一个字符为+或者-,则输出的时候为正数和负数。然后进入StrToIntCode函数将字符串转换为数字,在这里要考虑上溢出和下溢出。

            if ((!minus && num > 0x7FFFFFFF)                 || (minus && num < (signed int)0x80000000))/*判断是否上溢出或者上溢出*/
            {
                num = 0;
                break;
            }
时间: 2024-10-11 15:46:45

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

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

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)

把字符串转换为整数 代码(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

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

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

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

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

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

实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数

比如:输入字符串"1234",返回数字1234.       输入字符串"+1234",返回数字1234.       输入字符串"-1234",返回数字-1234.                      #include <stdio.h> int my_atoi(char s[10]) {   int flag=1;  //代表符号位的正负号   int ret=0;   //用于存储取出来的数   char *p=s;   

将一个字符串转换为对应的整数

例: 将"1234"转换为数字1234. 将"-1234"转换为数字-1234. 将"+1234"转换为1234. 分析: 先设置一个标签sign=1, 一个一个读取字符,读到第一个字符判断它是不是'-'和'+':如果是'-'那么令标记sign=-1,并且读取字符指针向后移一位,若果是'+',那么sign不变,指针向后移一位,将新读到的字符如'1',用'1'-'0',得到的值是数字1,设置变量num=0,每次读到的字符转换成数字与num*10相加

C语言:实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数,如+1234输出1234

#include<stdio.h> int my_atoi(char s[])     /*字符串转换函数*/ {  char* p = s;  int flag = 1;  int ret = 0;  if(*p=='-')  {   flag=-1;     }     if((*p=='+')||(*p=='-'))     {      p++;      }  while(*p!='\0')   {   if((*p>='0')&&(*p<='9'))  

c语言实现,将一个字符串转换为对应的整数

#include<stdio.h> #define M 10 int my_atoi(char s[]) {      int num=0;      int i=0;      while((s[i]=getchar())!='\n')      {           if(s[i]>='0'&&s[i]<='9')                num=(num*10)+(s[i]-'0');           i++;      }      if(s[0