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

时间:2016-03-27 04:04:04

标签: c arrays string char int

如何将char字符串转换为各种整数?例如:

char *ray = {'2','1','F',' ','2','3'}; //numbers can be any length

如何将上述行转换为:

int num = 21;
int num2 = 23;

2 个答案:

答案 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;
}
  • 这里,我将整个字符串输入变为“ray”(输入可以像“344h 54j5k45jn”)。
  • 对于该格式的任何字符串,您可以拥有最大天花板(ray.length())数字。从而创建一个大小的整数数组。
  • 现在迭代字符串字符,如果我找到一个连续的数字块,我将它们存储到整数数组中,如果我遇到一个分隔符,我不会处理它。
  • 接下来只打印整数数组。

如果需要对逻辑进行更多澄清,请告诉我。