C 将包含一些数字的字符串拆分为多个数字数组
我要求用户在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]即字符串2加s[1]即字符串0。 但它并没有像我预期的那样产生20个 在将其添加到新阵列之前,我需要加入 2) 。我不知道如何从单个函数返回3组数组 也许二维数组可以在这里工作 下面是我的代码(注意:我刚开始使用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} 之后,我想将这个新数组从此函数返回到主函数
#包括
#包括
#包括
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