繁体   English   中英

如何将char *转换为字符串?

[英]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;
}
  • 在这里,我将整个字符串输入放入“ ray”(输入可以像“ 344h 54j5k45jn”一样)。
  • 对于该格式的任何字符串,最多可以有一个ceiling(ray.length())数字。 这样就创建了一个该大小的整数数组。
  • 现在明智地遍历字符串字符,如果我发现一个连续的数字块,则将它们存储到整数数组中,如果遇到定界符,则不进行处理。
  • 接下来只需打印整数数组。

如果需要进一步说明逻辑,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM