开发者社区> 吴英强> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C语言atoi()和itoa()函数的实现

简介: <p>makefile</p> <p></p> <pre code_snippet_id="622931" snippet_file_name="blog_20150319_1_2637659" name="code" class="cpp">.SUFFIXES: .c .o CC=gcc SRCS=test.c OBJS=$(SRCS:.c=.o) EXEC=test all
+关注继续查看

makefile

.SUFFIXES: .c .o

CC=gcc
SRCS=test.c
	
OBJS=$(SRCS:.c=.o)
EXEC=test

all: $(OBJS)
	$(CC) -o $(EXEC) $(OBJS) 
	@echo '-------------ok--------------'

.c.o:
	$(CC) -Wall -g -o $@ -c $< 

clean:
	rm -f $(OBJS)
	rm -f core*

myitoa

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

void resver(char *s)//反转字符串
{
	int len = strlen(s);
	//printf("len=%d\n",len);
	int i = 0;
	char tmp = 0;
	for (; i<len/2; i++)
	{
		tmp = s[i];
		s[i] = s[len-1-i];
		s[len-1-i] = tmp;
	}
}

const char *myitoa(int n)
{
	static char buf[100];//必须为static,或者是全局变量
	memset(buf, 0, sizeof(buf));
	int FlagF = 0;    //1-f, 0-z
	int i = 0;
	if (n < 0)
	{
		FlagF = 1;
		n = 0 - n;
	}
	while (n)
	{
		buf[i++] = n % 10 + '0';
		n = n / 10;
	}
	if (FlagF == 1)
	{
		buf[i++] = '-';
	}
	buf[i] = '\0';
	printf("before buf:%s\n", buf);
	resver(buf);
	printf("after buf:%s\n", buf);
	return buf;
}

int main()
{
	printf("%s\n", myitoa(123));
	printf("%s\n", myitoa(-123));
	return 0;
}


myatoi

#include <stdio.h>
int mystrlen(const char *s)
{
    int i = 0;
    while (*s++)
    {
        i++;
    }
    return i;
}
int power10(int n)
{
    if (n == 0)
    {
        return 1;
    }
    int val = 1;
    int i = 0;
    for (; i < n; i++)
    {
        val = val * 10;
    }
    return val;
}
int char2i(char c)
{
    if ((c >= '0') || (c <= '9'))
    {
        return (c - '0');
    } else
    {
        return 0;
    }
}
int myatoi(const char *str)
{
    int FlagF = 0; //1-f, 0-z
    const char *p = str;
    int i = 0;
    int value = 0;
    if (str[0] == '-')
    {
        FlagF = 1; //
        p = ++str;
    }
    int len = mystrlen(p);
    int lentmp = len;
    for (; i < len; i++)
    {
        value += char2i(p[i]) * power10(lentmp - 1);
        lentmp--;
    }
    if (FlagF == 1)
    {
        return (0 - value);
    } else
    {
        return value;
    }
}
int main()
{
    const char *s = "-123";
    printf("%d\n", myatoi(s));
    return 0;
}


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
谈谈C语言的字面字符串
通过几段小程序深入分析了C语言中字面字符串(literal string)的特点以及正确的使用方式。
2930 0
《C语言及程序设计》实践项目——字符串数组
返回:贺老师课程教学链接 【项目1-带姓名的成绩单】设score数组中存储8名同学的C语言成绩,字符串数组name中存储同学们的姓名。这两个数组中,每名同学的姓名与成绩的下标要始终保持一致(例如name[i]和score[i]表示同一位同学(下标为i)的姓名和C语言成绩,否则会张冠李戴)。(1)输出按成绩排序后的同学的名单;(2)输出按同学姓名排序后的成绩单(排序对象是字符串)。#inclu
1182 0
《C语言及程序设计》实践参考——字符串复制
返回:贺老师课程教学链接  实践要求 【项目3-字符串复制】下面的程序,将str1中除空格外的所有字符,复制到了str2中。#include &lt;stdio.h&gt; int main() { char str1[100]="I am a happy boy\'s daddy.",str2[100]; int i=0,j=0; while(str1[i]!='\
714 0
《C语言及程序设计》实践项目——字符数组与字符串处理
返回:贺老师课程教学链接 【项目1-M$pszi$y是嘛意思?】背景:小明让同学传纸条给小丽。小丽接到会心一笑,大家却不知所云。纸条上写着M$pszi$y,两人暗中约定是,真实字符为实际字符前面的第4个!M$pszi$y是神马意思?推算一下,或从ASCII码表中查一下,自然是I love u。(1)小明请你写一个程序,在给小丽写情书时,再不用费功夫自己“翻译”,原信中每一个字符加密为其后的第
1200 0
《C语言及程序设计》实践参考——字符串处理函数
返回:贺老师课程教学链接  实践要求 【项目4-字符串处理函数】指针是神奇的,指向整型的指针int *p1,可以操作整型数组int a[];指向字符型的指针char *p2,可以操作字符数组(字符串)char str[];更灵活的是,在函数的传递中,指针、数组名在一定程度上可以互换。请编制函数,对字符串的进行各种操作。 序 功能 用数组名作形参 用指针作形参 1 字符串str1和str
1314 0
带有汉字的字符串截断出现半个“汉字”的解决方法-C语言源码
  汉字字符的编码为双字节,对于汉字字符和单字节字符混排的情况,如果目标截取的字符串内只包含奇数个单字节字符,则会出现半个汉字字符的问题。如下所示:   (1)天水市秦州区南郭路2号(工行七里墩分理处? --包含数字字符,单字节。
757 0
+关注
文章
问答
文章排行榜
最热
最新
相关课程
更多
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载