将数字字符串值转换为单个整数(不是ascii值)

问题描述 投票:0回答:4

我正在尝试将像“1234”这样的字符串转换为单个整数,例如,n = 1234;

我正在使用for循环,但它保存ASCII值而不是实际值

下面是代码

#include<stdio.h>

main()
{
    char lc[] = "12345";
    int i,n;
    p = lc;

    for(i=0;i<5;i++)
    {
        n = lc[i];
        printf("%d\n",n); 
    }
}

我错过了什么?

c dev-c++
4个回答
1
投票

在你的情况下,你只在每次迭代中将当前的ASCII值分配给n,正如你所提到的,你想要将Stringin转换为int

实现这一目标的简单而强大的功能可以替代您的方式:atoi(string)

在你的情况下:

 char lc[] = "12345";
 int n = atoi(lc);

1
投票

如果通过“转换”表示打印,那么你应该从字符中减去零的ascii值,然后将零的ascii打印为零,将ascii作为一个,依此类推,

char lc[] = "12345";
int i,n;

for(i=0;i<5;i++)
{
    n = lc[i]-'0';
    printf("%d\n",n); 
}

0
投票

因为我们使用ascii 48代表数字0,所以一个简单的方法达到它是由mod隐蔽它,因为ascii定义增量,所以49应该是1,依此类推。

#include<stdio.h>

main()
{

    char lc[] = "12345";
    int i,n;
    //p = &lc;
    int ascii_base=48;
    for(i=0;i<5;i++)
    {
        n = lc[i];
        printf("%d\n",n - ascii_base);
    }
    return 0;
}

如果你想保存它,你可以这样做:

#include<stdio.h>

main()
{

    char lc[] = "12345";
    int ln = sizeof lc;
    int i,n;
    //p = &lc;
    int ascii_base=48;
    for(i=0;i<5;i++)
    {
        n = lc[i];
        ln[i]=n - ascii_base;

    }
    printf("%s\n", ln);
    return 0;
}

0
投票

atoi的替代方法是使用sscanf,如果你想转换一个字符串中的多个数字,这是很有用的,特别是如果它们是不同的类型,如浮点数和整数。您需要包含stdio

char one_int[] = "12345";
char one_float = "3.14";
char a_float_and_an_int = "1024  6.28";

int first_int;
float first_float;
int second_int;
float second_float;

sscanf(one_int,"%d", &first_int);
sscanf(one_float, "%f", &first_float);
sscanf(a_float_and_an_int, "%d %f", &second_int, &second_float");
© www.soinside.com 2019 - 2024. All rights reserved.