C、 显示重复符号的计数

C、 显示重复符号的计数,c,C,需要找出一个计算字符串中所有重复符号的代码。正如你在下面看到的,到目前为止还不错 这里开始了棘手的部分,在代码的末尾,我想按照输入的顺序输出符号,例如,字符串中出现了两个符号,我很难弄清楚这一点 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++) { print

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

这里开始了棘手的部分,在代码的末尾,我想按照输入的顺序输出符号,例如,字符串中出现了两个符号,我很难弄清楚这一点

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]);
}
int计数[256]={0};
int i;
大小=strlen(文本);
对于(i=0;i
只需再次遍历源字符串,并针对每个字符查看
计数
数组


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

只需再次遍历源字符串,并针对每个字符查看
计数
数组

for(i = 0; i < size; i++) {
    if(counts[(int)(text[i])] == 2)
        printf("%d", (int)(text[i]));
如果不希望每次出现重复字符时都打印相同的统计信息,可以在打印统计信息后将相应的
计数
值重置为零,并在打印前进行额外检查

for(i=0;ifor(i = 0; i < size; i++) {
    if(counts[(int)(text[i])] == 2)
        printf("%d", (int)(text[i]));
如果(计数[(int)(文本[i])]==2) printf(“%d”,(int)(文本[i]); 第一行按发生顺序在源字符串中循环。 第二行检查它是否在计数数组中被捕获为仅发生两次。 如果是,我们在第三行打印字符代码

要仅打印一次字符,请执行以下操作:

for(i = 0; i < size; i++) {
    if(counts[(int)(text[i])] == 2) {
        printf("%d", (int)(text[i]));
        counts[(int)(text[i])] = 0;
    }
}
for(i=0;i
用于(i=0;i
第一行按发生顺序在源字符串中循环。 第二行检查它是否在计数数组中被捕获为仅发生两次。 如果是,我们在第三行打印字符代码

要仅打印一次字符,请执行以下操作:

for(i = 0; i < size; i++) {
    if(counts[(int)(text[i])] == 2) {
        printf("%d", (int)(text[i]));
        counts[(int)(text[i])] = 0;
    }
}
for(i=0;i
以下是受启发的答案的实现:

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.
    }
}
int计数[256]={0};
char text[]=“你好,世界!”;
int i,size=strlen(文本);
对于(i=0;i1)
{
printf(“%c”,文本[i]);
计数[(无符号整数)文本[i]]=0;//删除以重复打印。
}
}

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

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.
    }
}
int计数[256]={0};
char text[]=“你好,世界!”;
int i,size=strlen(文本);
对于(i=0;i1)
{
printf(“%c”,文本[i]);
计数[(无符号整数)文本[i]]=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]);
    }
}

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

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


你能解释一下你想要什么吗?你必须对它进行排序。如果
char
signed
并且你的字符值大于127,这是很危险的。@BitFiddlingCodeMonkey不,你不需要对它进行排序。看看当前的答案。@paddy关于signed/unsigned有什么好处。你能解释一下你想要什么吗?你必须对它进行排序。这很危险如果
char
signed
并且您的字符值大于127。@BitFiddlingCodeMonkey否,您不需要对其进行排序。请参阅当前答案。@paddy关于signed/unsigned的观点很好。如果您再次需要,您可能应该在修改缓冲区之前复制它。您可能应该在修改缓冲区之前复制它如果您再次需要它。它不应该是
=
而不是
=
?这取决于您是否要检查字符是否仅出现两次(
=
),或者是否至少出现两次(
=
)。我将编辑我的答案以指定,谢谢!谢谢帮助!但是,代码显示重复符号两次,而我只需要它显示一次。例如,如果我输入字符串“ABCA”,它应该显示“A”,而不是“AA”有什么想法吗?Inspired首先提到了它,所以我不想赊账,但是打印出来后,将
计数重置为0,我会更新代码。它不是应该是
=
而不是
=
?这取决于你是否想检查字符是否只出现了两次(
=
),或者如果它至少出现两次(
=
)。我将编辑我的答案以指定它,谢谢!谢谢帮助!但是,代码显示重复符号两次,而我只需要它显示一次。例如,如果我输入字符串“ABCA”,它应该显示“A”而不是“AA”有什么想法吗?Inspired首先提到了它,所以我不想赊账,但打印出来后,将
计数重置为0,我会更新代码。@BitFiddlingCodeMonkey,怎么会?应该是
>0
=1
。而不是
>1
。有人可以施放
(未签名字符)文本[I]
编制索引之前!!@Inspired说您需要再次遍历源字符串。@BitFiddlingCodeMonkey,这不是上次
for
循环所做的吗?另外,paddy,我假设OP想要打印出现两次或两次以上的字符。@JosuéMolina您只是按ASCII顺序打印所有字符的计数,不是按照它们在字符串中出现的顺序。根据您的示例,您应该首先打印
'H'
的字符计数,因为它首先出现在字符串中。@BitFiddlingCodeMonkey,howcome?应该是
>0
=1