需要找出一个计算字符串中所有重复符号的代码。正如你在下面看到的那样,到目前为止一直很好。
这里开始了棘手的部分,在代码的最后我想按照他们键入的顺序输出符号,例如在字符串中出现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]);
}
答案 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