您的位置:首页 > 编程语言 > C语言/C++

C语言中字符串到整型以及整型到字符串的转换粗浅实现

2015-05-13 20:34 357 查看
今天心血来潮实现了字符串到整型以及整型到字符串的转换函数, 因算法也不强, 所以效率也高不了, 因C语言用得不好, 就当练习吧. 另一种普遍做法是atoi实现字符串到整型当转换, snprintf实现整型到字符串的转换.

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

char *tostr(int in)
{
int len = int_len(in);
int begin = in < 0 ? 1 : 0;
len += begin;
char *buf = (char *)malloc(len + 1);
int multiple = 1;
int oldmultiple, i;
buf[len] = '\0';
if(in == 0)
{
buf[0] = '0';
}
else
{
if (in < 0)
{
buf[0] = '-';
in = -in;
}
for(i = len - 1; i >= begin; --i)
{
oldmultiple = multiple;
multiple *= 10;
buf[i] = '0' + ((in - (in / multiple * multiple)) / oldmultiple);
}
}
return buf;
}

int toint(char *str, int len, int *ret)
{
char *c = str;
int length = string_len(str, len);
if (length <= 0)
{
return -1;
}
int sigm = (*c == '+' || *c == '-') ? 1 : 0;
int result = 0;
int multiple = 1;
int i;
for (i = length + sigm - 1; i >= sigm; --i)
{
result += (c[i] - '0') * multiple;
multiple *= 10;
}
if (c[0] == '-') {
result = -result;
}
*ret = result;
return 0;
}

int int_len(int in)
{
int len = 0;
while(in != 0)
{
in = in / 10;
++len;
}
return len;
}

int string_len(char *str, int len)
{
int count = 0;
char *c = str;
while(*c != '\0' && count < len)
{
if (*c > '9' || *c < '0')
{
if (count == 0 && (*c == '+' || *c == '-'))
{
++c;
continue;
}
else
{
return -1;
}
}
else
{
++c;
++count;
}
}
return count;
}

int main(void)
{
printf("%d: %d\n", 0, int_len(0));
printf("%d: %d\n", -0, int_len(-0));
printf("%d: %d\n", 1, int_len(1));
printf("%d: %d\n", -1, int_len(-1));
printf("%d: %d\n", 40285, int_len(40285));
printf("%d: %d\n", -19948799, int_len(-19948799));

printf("-----------------------------------\n");

printf("%d: %s\n", 1, tostr(1));
printf("%d: %s\n", 0, tostr(0));
printf("%d: %s\n", 393, tostr(393));
printf("%d: %s\n", 50938325, tostr(50938325));
printf("%d: %s\n", -4922, tostr(-4922));
printf("%d: %s\n", -1, tostr(-1));
printf("%d: %s\n", -0, tostr(-0));

printf("-----------------------------------\n");

printf("%s: %d\n", "0", string_len("0", 1));
printf("%s: %d\n", "-0", string_len("-0", 2));
printf("%s: %d\n", "1", string_len("1", 1));
printf("%s: %d\n", "-1", string_len("-1", 2));
printf("%s: %d\n", "403295", string_len("403295", 6));
printf("%s: %d\n", "403295", string_len("403295", 9));
printf("%s: %d\n", "-11094885", string_len("-11094885", 9));
printf("%s: %d\n", "+11094885", string_len("+11094885", 9));
printf("%s: %d\n", "1+094885", string_len("1+094885", 8));
printf("%s: %d\n", "+", string_len("+", 1));
printf("%s: %d\n", "", string_len("", 1));

printf("-----------------------------------\n");

int ret = 0;
char *temp = "0";
if (!toint(temp, sizeof(temp), &ret)) {
printf("%s: %d\n", temp, ret);
}
temp = "-0";
if (!toint(temp, sizeof(temp), &ret)) {
printf("%s: %d\n", temp, ret);
}
temp = "-1";
if (!toint(temp, sizeof(temp), &ret)) {
printf("%s: %d\n", temp, ret);
}
temp = "1";
if (!toint(temp, sizeof(temp), &ret)) {
printf("%s: %d\n", temp, ret);
}
temp = "+321012";
if (!toint(temp, sizeof(temp), &ret)) {
printf("%s: %d\n", temp, ret);
}
temp = "-4995822";
if (!toint(temp, sizeof(temp), &ret)) {
printf("%s: %d\n", temp, ret);
}
temp = "+d";
if (!toint(temp, sizeof(temp), &ret)) {
printf("%s: %d\n", temp, ret);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 字符串 int 转换
相关文章推荐