[英]How to convert char* into string?
如何将char字符串转换为各种整数? 例如:
char *ray = {'2','1','F',' ','2','3'}; //numbers can be any length
我如何将上面的行转换为:
int num = 21;
int num2 = 23;
如何将char字符串转换为各种整数?
有几种方法可以从C字符串中提取整数。 我想到的前两个是sscanf()
函数和各种字符串到整数的转换函数,例如strtol()
。 首先,您需要一个实际的字符串:
char ray[] = {'2','1','F',' ','2','3', '\0' }; /* note the terminator */
或等于上一个的100%:
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()
构建解决方案可能会更容易。 该函数尝试将字符串的初始部分转换为整数,如果成功,它将返回一个指针,该指针指向转换后部分之后的字符串的尾部。 您可以使用它遍历字符串,并随即转换找到的每个数字。
假设您有任何非数字字符作为分隔符。 然后你可以尝试这个->
#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;
}
如果需要进一步说明逻辑,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.