C 计算数组中出现的字符数

C 计算数组中出现的字符数,c,arrays,loops,C,Arrays,Loops,很简单,但我有麻烦。我有一个数组中的随机字母序列: char box[] = "rbpbymgoybrppogrgxombpgpbpbooyogrrm"; 我需要计算某个字母出现的次数(例如字母“r”) 以下是我目前的计划: main() { int count = 0; for(int i = 0; i < sizeof(box); i++) { if(box[i] == '\r') count++; } printf("Red: %

很简单,但我有麻烦。我有一个数组中的随机字母序列:

char box[] = "rbpbymgoybrppogrgxombpgpbpbooyogrrm";
我需要计算某个字母出现的次数(例如字母“r”)

以下是我目前的计划:

main() {
    int count = 0;

    for(int i = 0; i < sizeof(box); i++) {
        if(box[i] == '\r') count++;
    }

    printf("Red: %d", count);
}
main(){
整数计数=0;
对于(int i=0;i

现在我已经有一种预感,使用“\r”尝试识别角色是不起作用的。是否有其他方法来表示字符并在数组中检查它们?我是否使用它们的ASCII等价物?

“\r”
将意味着。只需使用
'r'

if(box[i] == 'r')

下面的代码将给出输入字符串中每个字母类型的计数

只在第二个“for”循环中有选择地打印感兴趣的字母应该很容易

#include <stdio.h>

#define MAX_CHAR_TYPES (256)

static char box[] = "rbpbymgoybrppogrgxombpgpbpbooyogrrm";

static unsigned int charCounts[ MAX_CHAR_TYPES ]= {0};

int main( void )
{
    for(size_t i = 0; i < (sizeof(box)-1); i++)
    {
        charCounts[ (int)box[i] ]++;
    }

    for(int i=0; i < MAX_CHAR_TYPES; i++)
    {
        if( 0 < charCounts[i] )
        {
            printf("There were %d of the %c character\n", charCounts[i], (unsigned int)i);
        }
    }
    return 0;
} // end function: main
#包括
#定义最大字符类型(256)
静态字符框[]=“RBPBYMGOYBPOPOGGRGXOMBPPBPBOYOGRRM”;
静态无符号整数字符计数[最大字符类型]={0};
内部主(空)
{
对于(尺寸i=0;i<(尺寸(框)-1);i++)
{
字符计数[(int)框[i]]++;
}
对于(int i=0;i在R编程语言中,这就是我们得到的

>arr="aaaaafdgshghsghgshfsgfsaaadahsgdhsgdhaaaggghahgahgahghaghhhha"
>arr
#[1] "aaaaafdgshghsghgshfsgfsaaadahsgdhsgdhaaaggghahgahgahghaghhhha"
> aa=strsplit(arr,"")
> aa
#[[1]]
# [1] "a" "a" "a" "a" "a" "f" "d" "g" "s" "h" "g" "h" "s" "g" "h" "g" "s" "h" "f" "s" "g" "f" "s" "a" "a" "a" "d" "a" "h" "s"
#[31] "g" "d" "h" "s" "g" "d" "h" "a" "a" "a" "g" "g" "g" "h" "a" "h" "g" "a" "h" "g" "a" "h" "g" "h" "a" "g" "h" "h" "h" "h"
#[61] "a"
>table(aa[[1]])
#  a  d  f  g  h  s 
#  17  4  3 14 16  7 

我明白了…我还没有提到这个术语…我通常用反斜杠来识别数组中的整数,但我不知道字符的识别方式不同。为什么要用反斜杠来识别数组中的整数?我不确定…我只是假设它就是这样工作的哈哈。我猜它对整数的作用是一样的?我可以只使用“34”而不是“\34”?这里有点混乱:
“\34”
是单个字符,即ASCII值为28(八进制中的34)的控制字符,也称为FS(字段分隔符)或控制下划线<由于历史原因,编译器接受代码>'34'
,但没有定义语义
'3'
是字符3,
'4'
是字符4。
sizeof(box)
不是您所期望的。使用
strlen(box)
获取存储在数组中的字符串长度,而不是数组中条目的总数。如果您看不到差异,请阅读C字符串以及它们与
char
数组(和
char*
)的关系。首先,此代码不会编译,因为main()总是返回一个“int”。因为调用printf()需要这样的语句:
#include
还没有在类中涉及到#include,但是在阅读了它之后,strlen函数听起来更合适。另外,我确实包括了#include,我只是没有提到
'\r'
是回车字符
'r'
是字母r.
字符计数[(无符号字符)框[i]]++将更为谨慎。应使用
UCHAR_MAX+1
,而不是
256