如何将char字符串转换为各种整数?例如:
char *ray = {'2','1','F',' ','2','3'}; //numbers can be any length
如何将上述行转换为:
int num = 21;
int num2 = 23;
答案 0 :(得分:3)
如何将char字符串转换为各种整数?
有几种方法可以从C字符串中提取整数。我想到的前两个是sscanf()
函数和各种字符串到整数转换函数,例如strtol()
。但是,首先,您需要一个实际的字符串:
char ray[] = {'2','1','F',' ','2','3', '\0' }; /* note the terminator */
或者这与前一个相同:
char ray[] = "21F 23"; /* terminator is implicit */
。这也有效......
char *ray = "21F 23"; /* terminator is implicit */
......即使它不相同。 您的示例声明不是字符串,因为它没有终止。此外,您为声明为指针的变量提供了数组初始值设定项。尽管指针和数组之间有着密切的联系,但它们却是截然不同的。
鉴于ray
的任何一个声明,您可以执行
int num;
int num2;
int result = sscanf(ray, "%d%*[^0-9-]%d", &num1, &num2);
sscanf()
函数与scanf()
类似,但它从字符串而不是标准输入进行扫描。我假设您熟悉用于扫描可选带符号十进制整数的%d
字段描述符;两个%d
描述符之间的位描述了一个被扫描但未分配给任何变量(*
)的字段,它包含一个或多个不是十进制数字或连字符的字符序列/减号。显然,基于scanf的解决方案假设您知道字符串中需要多少个数字(在本例中为两个)。
如果您不确定字符串中将包含多少个数字,那么围绕strtol()
构建解决方案可能会更容易。该函数尝试将字符串的初始部分转换为整数,如果成功,则返回指向已转换部分后面的字符串尾部的指针。您可以使用它来遍历字符串,转换您找到的每个数字。
答案 1 :(得分:0)
假设您有任何非数字字符作为分隔符。然后你可以尝试这个 - >
#include <stdio.h>
#include<string.h>
#define MAX 100
int main() {
int a,flag=0,len,num_count=0,limit;
char ray[MAX];
fgets(ray,MAX-1,stdin);
len=strlen(ray);
int *numbers=(int*)calloc(sizeof(int),((len/2)+1));
for(a=0;a<len;a++){
if(ray[a]>='0' && ray[a]<='9'){
flag=1;
numbers[num_count]=(numbers[num_count]*10)+ray[a]-'0';
}
else{
if(flag!=0){
flag=0;
num_count++;
}
}
}
limit=(flag==0)?num_count:num_count+1;
for(a=0;a<limit;a++)
printf("%d\n",numbers[a]);
free(numbers);
return 0;
}
如果需要对逻辑进行更多澄清,请告诉我。