0

如果我有一个看起来像这样的数组:'A\t2\nB\t5\nC\t6\nB\t2\n' <- 字母和数字由制表符(\t)和新行(\n)分隔号码后。

我需要将相同的字母表收集在一起,并将字母表后面的数字相加。如果打印输出应如下所示:'A\t2\nB\t7\nC\t6'。

我想过使用 strcmp 函数,但输入数组可能会改变,所以我无法知道其中的字母表。

编辑:对不起,我认为我的问题不清楚。我的数组不仅是一个字符,它也可以是一个字符+数字的序列。如:'THIS\t25\nTHESE\t67\nTHOSE\t2\nTHESE\t102\nTHOSE23\t55\n'

4

3 回答 3

2

您可以将当前行的字母读入char c,将数字读入int iint alpha[26]定义所有条目初始化为0。然后你只需要:

alpha[c - 'A'] += i;

然后只需打印出所有非零条目alpha

于 2013-09-19T11:15:48.627 回答
0

我认为你应该首先找到最小的字母(通过 ASCII 码例如 A=65),搜索这个字母的输入字符串(可能使用 strchr)并求和(在单独的变量中)与这个字母相关的所有数字,最后写新字符串中的字母和数字并继续下一个字母(B=66)。然后,您将对新字符串进行排序和汇总。

char *input;
char *output;
char *p, *cur;
int nums, num;
char min;
char temp[20];
//search for minimal letter
for(int i = 0; i < strlen(input); i++){
    if(input[i] > 65 && input[i] < 90)
        if(input[i] < min)
            min = input[i];
}
//parsing input string
for(int i = 0; i < strlen(input)/4; i++){
//strlen(input)/4 because each sequense at least 4 letters
    p = input;
    num = 0;
    nums = 0;
    while(cur = strchr(p, min)){
        sscanf(cur+2, "%d", &num);
        nums += num;
        p = cur+1;
    }
    //filling new string
    sprintf(temp, "%c\t%d\n", min, nums);
    strcat(output, temp);
    min++;
}
于 2013-09-19T12:51:37.733 回答
0

您可以一次收集每个角色并使用开关来产生所需的输出......就像......

getch(c);
switch(c)
{
  //case for alphabets

  //case for numbers
}   
于 2013-09-19T11:13:33.317 回答