C,显示重复符号的数量

时间:2013-11-27 23:12:28

标签: c

需要找出一个计算字符串中所有重复符号的代码。正如你在下面看到的那样,到目前为止一直很好。

这里开始了棘手的部分,在代码的最后我想按照他们键入的顺序输出符号,例如在字符串中出现2个,并且我遇到了问题。

int counts[256] = { 0 };

int i;
size = strlen(text);

for (i = 0; i < size; i++) {
counts[(int)(text[i])]++;
}

for (i = 0; i < 256; i++) {
printf("The %d. character has %d occurrences.\n", i, counts[i]);
}

4 个答案:

答案 0 :(得分:2)

再次遍历源字符串,并为每个字符查看counts数组。

如果您不希望每次出现重复字符时都打印相同的统计信息,则可以在打印统计信息后将相应的counts值重置为零,并在打印前进行额外检查。

答案 1 :(得分:1)

for(i = 0; i < size; i++) {
    if(counts[(int)(text[i])] == 2)
        printf("%d", (int)(text[i]));

第一行在源字符串中循环显示出现的顺序。 第二行检查它是否在计数数组中捕获,只发生两次。 如果是,我们在第三行打印字符代码。

仅打印一次角色:

for(i = 0; i < size; i++) {
    if(counts[(int)(text[i])] == 2) {
        printf("%d", (int)(text[i]));
        counts[(int)(text[i])] = 0;
    }
}

答案 2 :(得分:1)

以下是受启发的回答的实现:

int counts[256] = { 0 };

char text[] = "Hello, world!";

int i, size = strlen(text);

for (i = 0; i < size; i++)
{
    counts[(unsigned int)(text[i])]++;
}

for (i = 0; i < size; i++)
{
    if (counts[(unsigned int)text[i]] > 1)
    {
        printf("%c", text[i]);
        counts[(unsigned int)text[i]] = 0; // Remove to print repeats.
    }
}

答案 3 :(得分:0)

制作一个密钥,计数对,如:

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

int main()
{
    char* text = "count this text";
    char *keys = new char[strlen(text)];
    int* count = new int[strlen(text)];
    int last = 0; int j=0;

    for(int i=0; i<strlen(text); i++){
      for(j=0; j<last; j++){
        if(keys[j]==text[i]) break;
      }
      if(keys[j]==text[i]){
        count[j]++;
      } else {
        keys[last]=text[i];
        count[last]=1;
        last++;
      }
    }

    for(int i=0; i<last; i++){

        printf("%c %d\n", keys[i], count[i]);
    }
}

所以你要保留文本中的顺序并获得计数。

执行时输出为:

c 1
o 1
u 1
n 1
t 4
2
h 1
i 1
s 1
e 1
x 1