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

时间:2020-06-24 17:33:45

标签: c arrays function return-value

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

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

例如,如果用户输入:

“ 20_30_4_50,6_7_80_90,11_22_3_44 \ n”

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

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

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

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

之后,我要将此新数组从此函数返回到MAIN函数。

问题和我尝试过的是:

1)。我不知道如何将两个数字字符串加在一起。

我尝试了 s [0] 字符串2 加上 s [1] 字符串0。 < / p>

但我未预期会产生20个

在将其添加到新数组之前,我需要先加入。

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

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

下面是我的代码(注意:我只是从C开始)

#include <stdio.h>
#include <string.h>
#include <ctype.h>


int arr(string sarr);
int main() {
    char s[100] = "20_30_4_50, 6_7_80_90,11_22_3_44"
    
    arr(s); //calling the function
    return 0;
}

int arr(string sarr)
{
    int len = strlen(sarr);
    int coma_count = 0, coma_pos[5], c_pos = 0;
    for (int i = 0; i < len; i++)
    {
        if (sarr[i] = ",")
        {
      //count the no. of coma separated values.
            coma_count += 1; 
     //store position of each coma in an array.
            coma_pos[c_pos] = i;
        }
        if else(isdigit(sarr[len]))
        {
            //code here
        }
    }
    
    int index = 0, count = 0;
    for (int i = 0; i < coma_pos[0] - 1; i++)
    {
        if (isdigit(sarr[i]) && isdigit(sarr[i + 1]) && sarr[i - 1] is not a digit)
        {
            newArr[count][index] = sarr[i] + sarr[i + 1]; //Won't work 
            index += 1;
        }
        
        else if (isdigit(sarr[i]) && sarr[i + 1] IS NOT A DIGIT && sarr[i - 1] IS NOT A DIGIT)
        {
            newArr[count][index] = sarr[i];
            index += 1;
        }
    }
    return //the new array to main    
}

2 个答案:

答案 0 :(得分:3)

您在编写C还是C ++? 如果正在编写C,则字符串数据类型不存在,因此必须使用如下定义的char数组:

char array[25];

在此语句if (sarr[i] = ",")上,您正在分配作业,而不是进行比较,正确的形式是这样的:

if (sarr[i] == ',')

请注意,我使用的是单引号,如果要比较字符,这是必需的。

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

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

答案 1 :(得分:2)

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

  2. 我相信您还不熟悉指针的概念,因此,现在唯一的方法就是将数组作为参数传递给函数,如下所述。

这是一个解决方案,可能不是最好的(我很快就编码了),但是对于您当前的水平来说就可以了:

#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;
    }
}