我要用户在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
}
答案 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)
这在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;
}
}