将数字字符串值转换为单个整数(不是 ascii 值)
convert numeric string values into a single integer (not ascii values)
我正在尝试将“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);
}
}
我错过了什么??
如果 "conversion" 你的意思是打印那么你应该从字符中减去零的 ascii 值,然后零的 ascii 将打印为零,一的 ascii 将打印为一等等,
char lc[] = "12345";
int i,n;
for(i=0;i<5;i++)
{
n = lc[i]-'0';
printf("%d\n",n);
}
在您的情况下,您只在每次迭代中将当前 ASCII
值分配给 n
,正如您提到的,您希望将 String
转换为 int
。
一个简单而强大的功能实现,替代你的方式: atoi(string)
你的情况:
char lc[] = "12345";
int n = atoi(lc);
因为我们使用 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;
}
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");
我正在尝试将“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);
}
}
我错过了什么??
如果 "conversion" 你的意思是打印那么你应该从字符中减去零的 ascii 值,然后零的 ascii 将打印为零,一的 ascii 将打印为一等等,
char lc[] = "12345";
int i,n;
for(i=0;i<5;i++)
{
n = lc[i]-'0';
printf("%d\n",n);
}
在您的情况下,您只在每次迭代中将当前 ASCII
值分配给 n
,正如您提到的,您希望将 String
转换为 int
。
一个简单而强大的功能实现,替代你的方式: atoi(string)
你的情况:
char lc[] = "12345";
int n = atoi(lc);
因为我们使用 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;
}
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");