#include <stdio.h>
#include <string.h>
#define SIZE 40
int main(void)
{
char buffer1[SIZE] = "computer program";
char *ptr;
int ch = 'p', j = 0, i;
for (i = 0; i<strlen(buffer1); i++)
{
ptr = strchr(buffer1[i], ch);
if (ptr != 0) j++;
printf(" %d ", j);
}
}
我想计算一个字符在字符串中出现的次数。 在我的节目中,我选择了角色'p'。
我认识Pascal,我现在正在学习C.在pascal中是一个名为Pos(x,y)的函数,它在y中搜索x。这是熟悉的吗?我想我在这里使用的不是。
答案 0 :(得分:3)
strchr
的功能签名是
char *strchr(const char *s, int c);
您需要传递char*
,但已通过char
。这是错的。
你在循环中使用了strlen
- 使其效率低下。只计算一次字符串的长度,然后迭代它。
char *t = buffer;
while(t!= NULL)
{
t = strchr(t, ch);
if( t ) {
t++;
occurences++;
}
}
如果不使用标准库函数,您只需循环遍历char数组。
size_t len = strlen(buffer);
for(size_t i = 0; i < len; i++){
if( ch == buffer[i]) occurences++;
}
或者不使用strlen
char *p = buffer;
while(*p){
if( *p == ch ){
occurences++;
}
p++;
}
或者
for(char *p = buffer; *p; occurences += *p++ == ch);
答案 1 :(得分:-2)
试试这个例子:
int main()
{
char buffer1[1000] = "computer program";
char ch = 'p';
int i, frequency = 0;
for(i = 0; buffer1[i] != '\0'; ++i)
{
if(ch == buffer1[i])
++frequency;
}
printf("Frequency of %c = %d", ch, frequency);
return 0;
}