Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.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
C 将包含一些数字的字符串拆分为多个数字数组_C_Arrays_Function_Return Value - Fatal编程技术网

C 将包含一些数字的字符串拆分为多个数字数组

C 将包含一些数字的字符串拆分为多个数字数组,c,arrays,function,return-value,C,Arrays,Function,Return Value,我要求用户在MAIN函数中输入一个包含数字、下划线和逗号的字符串 我正在创建一个函数,它将字符串拆分为多个数组(使用逗号作为分隔符) 例如,如果用户输入: “20\u30\u4\u50、6\u7\u80\u90、11\u22\u3\u44\n” 我想将用户的字符串拆分为三组数组,并转换为整数,使用下划线确定每个值 set1[size]={20,30,4,50} set2[size]={6,7,80,90} set3[size]={11,22,3,44} 之后,我想将这个新数组从此函数返回到主函数

我要求用户在MAIN函数中输入一个包含数字、下划线和逗号的字符串

我正在创建一个函数,它将字符串拆分为多个数组(使用逗号作为分隔符)

例如,如果用户输入:

“20\u30\u4\u50、6\u7\u80\u90、11\u22\u3\u44\n”

我想将用户的字符串拆分为三组数组,并转换为整数,使用下划线确定每个值

set1[size]={20,30,4,50}

set2[size]={6,7,80,90}

set3[size]={11,22,3,44}

之后,我想将这个新数组从此函数返回到主函数

问题和我尝试过的是:

1) 。我不知道如何将两个字符串(即数字)相加

我尝试了s[0]字符串2s[1]字符串0。

但它并没有像我预期的那样产生20个

在将其添加到新阵列之前,我需要加入

2) 。我不知道如何从单个函数返回3组数组

也许二维数组可以在这里工作

下面是我的代码(注意:我刚开始使用C)

#包括
#包括
#包括
int-arr(字符串sarr);
int main(){
char s[100]=“20_30_4_50,6_7_80_90,11_22_3_44”
arr(s);//调用函数
返回0;
}
内部arr(字符串sarr)
{
int len=strlen(sarr);
int coma_count=0,coma_pos[5],c_pos=0;
对于(int i=0;i > p>你写的是C还是C++?
如果要编写C,则字符串数据类型不存在,因此必须使用如下定义的字符数组:

char array[25];
同样在这句话中,
if(sarr[i]=“,”)
你是在做赋值,而不是比较,正确的形式是:

if (sarr[i] == ',')
请注意,我使用的是单引号,如果要比较字符,这是必需的

在此行的第二部分
newArr[count][index]=sarr[i]+sarr[i+1]您试图在不存在的数组中相互添加字符串

从创建一个新数组或将SARR内容转换为整数,然后定义NeWAR(我不认为你定义它),它应该工作。< /P> < P>你是写C还是C++? 如果要编写C,则字符串数据类型不存在,因此必须使用如下定义的字符数组:

char array[25];
同样在这句话中,
if(sarr[i]=“,”)
你是在做赋值,而不是比较,正确的形式是:

if (sarr[i] == ',')
请注意,我使用的是单引号,如果要比较字符,这是必需的

在此行的第二部分
newArr[count][index]=sarr[i]+sarr[i+1]您试图在不存在的数组中相互添加字符串

首先创建一个新数组或将sarr的内容转换为整数,然后定义newArr(我认为您没有定义它),它应该可以工作

  • 这在C语言中有点复杂(将在下面的代码中显示),不能像Python或其他语言那样只添加字符串

  • 我相信您还不熟悉指针的概念,所以现在唯一可以做的就是将数组作为参数传递给函数,如下所述

  • 这里有一个解决方案,可能不是最好的(我很快编写了代码),但它适合您当前的级别:

    #include <stdio.h>
    
    void arr(char sarr[], int set1[], int set2[], int set3[]);
    void print_fun(int set1[], int set2[], int set3[]);
    
    int main() {
        char s[100] = "20_30_4_50,6_7_80_90,11_22_3_44";
        int set1[20],set2[20],set3[20];
    
        arr(s,set1,set2,set3);
    
        print_fun(set1,set2,set3);
    
        return 0;
    }
    
    void print_fun(int set1[], int set2[], int set3[])
    {
        for(int i = 0; i < 4; i++)
        printf("%d ", set1[i]);
        printf("\n");
    
        for(int i = 0; i < 4; i++)
        printf("%d ", set2[i]);
        printf("\n");
    
        for(int i = 0; i < 4; i++)
        printf("%d ", set3[i]);
        printf("\n");
    }
    
    int make_num(char string[])
    {
        int len,num = 0;
    
        len = strlen(string);
        for(int i = 0; i < len; i++)
        {
            num = num*10 + (string[i] - '0');
        }
    
        return num;
    }
    
    void arr(char sarr[], int set1[], int set2[], int set3[])
    {
        int len = strlen(sarr);
        int coma_count = 1, num_tmp, ind, new_arr_ind = 0;
        char tmp[10];
    
        for (int i = 0; i < len; i++)
        {
            ind = 0;
    
            while(sarr[i] != ',' && sarr[i] != '\0')
            {
                if(sarr[i] != '_')
                {
                    tmp[ind++] = sarr[i];
                }
    
                else
                {
                    tmp[ind] = '\0';
                    num_tmp = make_num(tmp);
    
                    switch(coma_count)
                    {
                        case 1:
                            set1[new_arr_ind] = num_tmp;
                            break;
    
                        case 2:
                            set2[new_arr_ind] = num_tmp;
                            break;
    
                        case 3:
                            set3[new_arr_ind] = num_tmp;
                            break;
                    }
    
                    ind = 0;
                    new_arr_ind++;
                }
    
                i++;
            }
            tmp[ind] = '\0';
            num_tmp = make_num(tmp);
    
            switch(coma_count)
            {
                case 1:
                    set1[new_arr_ind] = num_tmp;
                    break;
    
                case 2:
                    set2[new_arr_ind] = num_tmp;
                    break;
    
                case 3:
                    set3[new_arr_ind] = num_tmp;
                    break;
            }
    
            coma_count++;
            new_arr_ind = 0;
        }
    }
    
    #包括
    无效arr(字符sarr[],整数集1[],整数集2[],整数集3[]);
    无效打印(int set1[],int set2[],int set3[]);
    int main(){
    char s[100]=“20_30_4_50,6_7_80_90,11_22_3_44”;
    int set1[20]、set2[20]、set3[20];
    arr(s,set1,set2,set3);
    打印乐趣(set1、set2、set3);
    返回0;
    }
    无效打印乐趣(整数集1[],整数集2[],整数集3[]
    {
    对于(int i=0;i<4;i++)
    printf(“%d”,set1[i]);
    printf(“\n”);
    对于(int i=0;i<4;i++)
    printf(“%d”,set2[i]);
    printf(“\n”);
    对于(int i=0;i<4;i++)
    printf(“%d”,set3[i]);
    printf(“\n”);
    }
    int make_num(字符字符串[])
    {
    int len,num=0;
    len=strlen(字符串);
    对于(int i=0;i