Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将char*转换为字符串?_C_Arrays_String_Char_Int - Fatal编程技术网

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

如何将char*转换为字符串?,c,arrays,string,char,int,C,Arrays,String,Char,Int,如何将字符字符串转换为各种整数?例如: char *ray = {'2','1','F',' ','2','3'}; //numbers can be any length 如何将上面的行转换为: int num = 21; int num2 = 23; 假设您有任何非数字字符作为分隔符。然后你可以试试这个-> #include <stdio.h> #include<string.h> #define MAX 100 int main() { int a,f

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

char *ray = {'2','1','F',' ','2','3'}; //numbers can be any length
如何将上面的行转换为:

int num = 21;
int num2 = 23;

假设您有任何非数字字符作为分隔符。然后你可以试试这个->

#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;
}
#包括
#包括
#定义最大值100
int main(){
int a,flag=0,len,num_count=0,limit;
半焦射线[MAX];
fgets(射线,最大值1,标准偏差);
len=strlen(射线);
int*numbers=(int*)calloc(sizeof(int),((len/2)+1));
对于(a=0;a='0'&&ray[a]
如何将字符字符串转换为各种整数

有几种方法可以从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()构建解决方案可能会更容易
。该函数尝试将字符串的初始部分转换为整数,如果成功,它将返回一个指针,指向转换部分后面的字符串尾部。您可以使用该指针遍历字符串,在运行时转换找到的每个数字。

值得注意的是,OP的示例没有使用以null结尾的字符串,以及它对
sscanf
strtol
@CareyGregory等事物会产生什么影响,是的,这就是我在回答的第一部分所做的。我已经扩展了我的评论部分,使之更清楚。为什么要增加
fgets
的复杂性?也许OP不知道I/O但是。我基本上使用了fgets()来代替不推荐使用的get(),因为它容易出现缓冲区溢出问题。不,我只是说为什么要从文件中读取?OP没有这样做,甚至可能还不知道I/O。注意:不需要-1
char-ray[MAX];fgets(ray,MAX-1,stdin);
-->
fgets(ray,MAX,stdin);
或更好的
fgets(光线、光线大小、标准尺寸);