码迷,mamicode.com
首页 > 编程语言 > 详细

【C语言】数字字符串转换成这个字符串对应的数字。

时间:2015-04-26 16:48:04      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

(1) int ascii_to_integer(char *str)函数实现。

要求:这个字符串参数必须包含一个或者多个数字,函数应该把这些数字转换为整数并且返回这个整数。如果字符串参数包含任何非数字字符,函数就返回零。不必担心算数溢出。

提示:你每发现一个数字,把当前值乘以10,并把这个值和新的数字所代表的值相加。

直接上代码:

#include <stdio.h>
#include <assert.h>
int ascii_to_integer(char *str)
{
    int n = 0;
    assert(str);
    while(*str != ‘\0‘)
    {
        while(*str >= ‘0‘ && *str <= ‘9‘)//判断字符串是否全为数字
        {
            n = n*10 + (*str-‘0‘);
            str++;
        }
        return n;
    }
    return 0;
}
int main ()
{
    char a[] = "12345";
    printf("%d\n",ascii_to_integer(a));
    return 0;
}

讲解:

字符指针减去’0’(对应ASCII值为48),即将其对应的ASCII码值转换为整型。第一次循环*str指向的是字符’1’,其对应的ASCII码值为49,而’0’对应ASCII码值为48,所以运用”*str-‘0’“目的是将字符’1’转换成数字1,后面以此类推。
.
.
.
.
.
.
.

(2)double my_atof(char *str)函数实现。

要求:将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)。

例如:”12.34”返回12.34;”-12.34”返回-12.34

#include <stdio.h>
#include <assert.h>
double my_atof(char *str)
{
    double n = 0.0;
    double tmp = 10.0;
    int flag = 0;
    assert(str);
    if(*str == ‘-‘)
    {
        flag = 1;
        str++;
    }
    while(*str >= ‘0‘ && *str <= ‘9‘)
    {
        n = n*10 + (*str - ‘0‘);
        str++;
    }
    if(*str = ‘.‘)  
    {  
        str++;  
        while(*str >= ‘0‘ && *str <= ‘9‘)  
        {  
            n = n + (*str -‘0‘)/tmp;;  
            tmp = tmp * 10;  
            str++;  
        }  
    }
    if(flag == 1)
    {
        n = -n;
    }
    return n;
}
int main ()
{
    char a[] = "12.345678";
    char b[] = "-12.345678";
    printf("%f\n%f\n",my_atof(a),my_atof(b));
    return 0;
}

直接上图:

技术分享
.
.
.
.
.
.
.
(3)int my_atoi(char *str)函数实现。

要求:将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数)。

例如:”12”返回12,”-123”返回-123;

#include <stdio.h>
#include <assert.h>
int my_atoi(char *str)
{
    int n = 0;
    int flag = 0;
    assert(str);
    if(*str == ‘-‘)
    {
        flag = 1;
        str++;
    }
    while(*str >= ‘0‘ && *str <= ‘9‘)
    {
        n = n*10 + (*str - ‘0‘);
        str++;
    }
    if(flag == 1)
    {
        n = -n;
    }
    return n;
}
int main ()
{
    char a[] = "12";
    char b[] = "-123";
    printf("%d\n%d\n",my_atoi(a),my_atoi(b));
    return 0;
}

.
.
.
.
.
.
以上三个函数的实现功能非常类似,只需掌握其一,其他便不在话下。

【C语言】数字字符串转换成这个字符串对应的数字。

标签:

原文地址:http://blog.csdn.net/sulijuan66/article/details/45288827

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!