C-由空格分隔成整数数组的数字字符串

C-由空格分隔成整数数组的数字字符串,c,arrays,string,C,Arrays,String,我一直在尝试实现一个函数,该函数可以转换如下内容: 123340 放入整数数组,清除空格: int数组[size]={12,13,3,4,0} 代码(我尝试过两种实现): void string_to_int(字符*行,整数数组[],整数大小){ int i=0; //第一次实施: char*ptr=行; 而(*ptr!='\n') { sscanf(ptr、%d%n、&数组[i]、&偏移量); ptr+=偏移量; i++; } //第二次执行: 对于(i=0;i='0'&&&*ptr='0'

我一直在尝试实现一个函数,该函数可以转换如下内容:

123340

放入整数数组,清除空格: int数组[size]={12,13,3,4,0}

代码(我尝试过两种实现):

void string_to_int(字符*行,整数数组[],整数大小){
int i=0;
//第一次实施:
char*ptr=行;
而(*ptr!='\n')
{ 
sscanf(ptr、%d%n、&数组[i]、&偏移量);
ptr+=偏移量;
i++;
}
//第二次执行:
对于(i=0;i
第一个实现在某种程度上起了作用,但我在sscanf行中遇到了valgrind错误。
第二种方法不适用于大于10的数字,您可以使用strok从整个字符串中获取一个数字作为字符串标记,然后将其转换为整数。要使用该函数,必须包含
string.h

C库函数char*strtok(char*str,constchar*delim)使用分隔符delim将字符串str分解为一系列标记

在这里,您的分隔符将是一个空格“”

对strtok()的第一个调用返回一个指针,指向s1指向的字符串中的第一个标记。对strtok()的后续调用必须传递空指针作为第一个参数,以便获取字符串中的下一个标记。对strtok()的每个调用中使用的分隔符集在对下一个调用的调用中可能不同

代码如下:

 char str[20] = "1 2 3 4 5 6 10 12";
 char *token;

 int array[20];
 int top=-1;
 int i;

 token = strtok(str, " ");
 while( token != NULL )
 {
      top++;
      array[top] = atoi(token);

      token = strtok(NULL, " ");

 }

for(i=0;i<=top;i++)
{
    printf("%d ",array[i]);
}
charstr[20]=“1234561012”;
字符*令牌;
int数组[20];
int top=-1;
int i;
标记=strtok(str,“”);
while(令牌!=NULL)
{
top++;
数组[top]=atoi(令牌);
令牌=strtok(空,“”);
}

对于(i=0;i可能最简单的是一个穿过直线的循环,例如

char *ptr= line;
int i= 0;
while (*ptr) {
    if (*ptr>='0'&&*ptr<='9') {
        arr[i]= 0;
        while (*ptr>='0'&&*ptr<='9') arr[i] = arr[i]*10 + *ptr++ - '0';
        i++;
        if (i>=N) break;  // array full
    }
    else ptr++;
}
char*ptr=line;
int i=0;
while(*ptr){
如果(*ptr>='0'&&&*ptr='0'&&&*ptr=N)中断;//数组已满
}
else-ptr++;
}

深入研究。第二种方法由于明显的原因不起作用,请确认您理解这一点。仔细研究一下,只需添加代码写入数组就很容易适应。另外,请提问并向我们展示如何调用
string\u to\u int
@MichaelWalz god man,谢谢!!我不知道strokexactly!!这就是e我在上面提到strtok之后才想到的xact实现!!非常感谢大家,我在这上面花了一天的时间,我搜索了很多关于这个的答案,但什么也没找到,所以任何人都读了这个,给这个美女投票我很高兴我能帮上忙:D.继续使用它。这里真是太棒了:)
char *ptr= line;
int i= 0;
while (*ptr) {
    if (*ptr>='0'&&*ptr<='9') {
        arr[i]= 0;
        while (*ptr>='0'&&*ptr<='9') arr[i] = arr[i]*10 + *ptr++ - '0';
        i++;
        if (i>=N) break;  // array full
    }
    else ptr++;
}