栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言字符串转整型函数实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言字符串转整型函数实现

简介

由于有些设备平台出于某些目的,不提供c函数库中的字符串转整型函数。为此,本文在这里提供一些"轮子"。

atoi()函数实现
int isDigit(char c) 
{
    return (c >= '0') && (c <= '9');
}

int myAtoi(char *str) 
{
    int result = 0;
    int neg_multiplier = 1;

    // Scrub leading whitespace
    while (*str && (
            (*str == ' ') ||
            (*str == 't'))) 
        str++;

    // Check for negative
    if (*str && *str == '-') {
        neg_multiplier = -1;
        str++;
    }

    // Do number
    for (; *str && isDigit(*str); str++) {
        result = (result * 10) + (*str - '0');
    }

    return result * neg_multiplier;
}
itoa()函数实现
#include 
#include 

char *itoarl(int64_t num, char *dest, int destlen) {
    char buf[60];
    int neg = num < 0;
    int bufind = 0;
    int i;

    if (neg) {
        num *= -1;
    }

    // Now, scrub off the digits
    while (num > 0) {
        int digit = num%10;
        buf[bufind++] = '0'+digit;
        num /= 10;
    }
    if (neg) {
        buf[bufind++] = '-';
    }

    buf[bufind]='';

    if (bufind > destlen) {
        return (char*)0;
    }

    // Now we have it reversed -- reverse it back into the dest.
    dest[bufind]=buf[bufind];
    bufind--;
    for (i=0; bufind >= 0; i++, bufind--) {
        dest[bufind] = buf[i];
    }
    return dest;
}

int64_t Pow(num, exp) {
    int64_t result = 1;

    for (; exp > 0; exp--) {
        result *= num;
    }

    return result;
}

char *itoalr(int64_t num, char *dest, int destlen) {
    int neg = num < 0;
    int bufind = 0;

    if (neg) {
        num *= -1;
        dest[bufind++]='-';
    }

    // How many digits are in the string?
    float fnumDigits = log10(num);
    int numDigits = (int)fnumDigits;

    if ((float)numDigits != fnumDigits) 
        numDigits ++;

    //printf("Num: %lld  Digits: %d (fDigits): %fn", num, numDigits, fnumDigits);

    // Now walk through
    for (int exp = numDigits -1; exp >= 0; exp--) {
        int64_t mask = Pow(10, exp);
        int digit = num / mask;
        int64_t sub = digit * mask;

        num -= sub;
        dest[bufind++] = '0'+digit;
    }
    dest[bufind]='';
    return dest;
}

char *itoa(int64_t num, char *dest, int destlen) {
    return itoarl(num, dest, destlen);
}
atof()函数实现
static int is_digit(char ch)
{   
  if(ch>='0'&&ch<='9')
    return 1;
  else
    return 0;
} 

static int is_space(char ch)
{   
  if(ch==' ')
    return 1;
  else
    return 0;
}

static double _atof(char *s)
{
  double power,value;
  int i,sign;
  for(i=0;is_space(s[i]);i++);//除去字符串前的空格
  sign=(s[i]=='-')?-1:1;
  if(s[i]=='-'||s[i]=='+')//要是有符号位就前进一位
    i++;
  for(value=0.0;is_digit(s[i]);i++)//计算小数点钱的数字
    value=value*10.0+(s[i]-'0');
  if(s[i]=='.')
    i++;
  for(power=1.0;is_digit(s[i]);i++)//计算小数点后的数字
  { 
    value=value*10.0+(s[i]-'0');
    power*=10.0;
  } 

  return sign*value/power;
} 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925971.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号