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
。