请编写函数fun(),它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。

时间:2021-07-26 17:02:59
 RT,因为时间很紧,所以请各路高手相助了。拜托了


32、编程题
请编写函数fun(),它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。
例如,若输入字符串123412132,输入字符1,则输出3。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <conio.h>
#include <stdio.h>
#define M 81
int fun(char *ss, char c)
{

}
main()
{ char a[M], ch;
clrscr();
printf("\nPlease enter a string: "); gets(a);
printf("\nPlease enter a char: "); ch=getchar();
printf("\nThe number of the char is: %d\n", fun(a,ch));
}

13 个解决方案

#1



int fun(char *ss, char c)
{
int n = 0; // 所要返回的个数
int i;
for(i = 0; ss[i]; i++)
{
if(ss[i] == c)
n++;
}
return n;
}

应该这样没错吧

#2



int fun(char *ss, char c)
{
    int count = 0;
    while(*ss != NULL)
    {
        if (strncmp(ss, &c, 1) == 0)
        {
            count++;
        }
        *ss++;
    }
    return count;
}

个人认为,字符比较,切记直接比较

#3


用strchr函数.

int fun(char *ss, char c)
{
int count = 0;
char *p;
while((p=strchr(ss, c)) != NULL) {
count++;
ss = p + 1;
}
return count;
}

另外,提醒一下楼主主函数里的输入, 
printf("\nPlease enter a string: "); gets(a);
printf("\nPlease enter a char: "); ch=getchar(); //这里输入前最好先清空键盘缓冲.因为前面gets的输入后,键盘缓冲区里还留有一个回车.这时读取的将会是回车符,而不会接受键盘输入.

#4


向高手学习啦,我只是抛砖引玉而已,嘿嘿

#5


2楼,为什么字符比较切忌直接比较呀,解释一下,谢谢啦~~~

#6


因为直接比较效率高啊,呵呵

#7


int fun(char *ss, char c)
{
    int count = 0;
    char *p;
    while((p=strchr(ss, c)) != NULL) {
        count++;
        ss = p + 1;    
    }
    return count;
}

#8


直接比较就可以了啊
int fun(char *ss, char c)
{
   int icont = 0;
   if(ss==NULL)
      return -1;
   while(*ss!='\0'){
       if(*ss++==c)
          icont++;
   }
   return  icont;
}

#9


int fun(char *ss, char c)
{
    int n = 0; 
    int i;
    if (ss==NULL) {
        printf("error: ss is NULL!\n");
        return 0;
    }

    while (ss[i]) {
        if (ss[i++]==c)
            n++;
    }
    return n;
}

#10



int fun(char *ss, char c)
{
        int n;

        for (n = 0; *ss; ss++)
                (*ss == c) && n++;

        return n;
}

#11


int func(char *ss, char c){
   return (*ss == '\0') ? (0) : ((*ss == c) ? (1 + Func(ss+1, c)) : (Func(ss+1, c)));
}

/* 呵呵  我的就一行   不过  我比较喜欢10楼的代码 */

#12


10楼牛B!!!

#13


呵呵..............

#1



int fun(char *ss, char c)
{
int n = 0; // 所要返回的个数
int i;
for(i = 0; ss[i]; i++)
{
if(ss[i] == c)
n++;
}
return n;
}

应该这样没错吧

#2



int fun(char *ss, char c)
{
    int count = 0;
    while(*ss != NULL)
    {
        if (strncmp(ss, &c, 1) == 0)
        {
            count++;
        }
        *ss++;
    }
    return count;
}

个人认为,字符比较,切记直接比较

#3


用strchr函数.

int fun(char *ss, char c)
{
int count = 0;
char *p;
while((p=strchr(ss, c)) != NULL) {
count++;
ss = p + 1;
}
return count;
}

另外,提醒一下楼主主函数里的输入, 
printf("\nPlease enter a string: "); gets(a);
printf("\nPlease enter a char: "); ch=getchar(); //这里输入前最好先清空键盘缓冲.因为前面gets的输入后,键盘缓冲区里还留有一个回车.这时读取的将会是回车符,而不会接受键盘输入.

#4


向高手学习啦,我只是抛砖引玉而已,嘿嘿

#5


2楼,为什么字符比较切忌直接比较呀,解释一下,谢谢啦~~~

#6


因为直接比较效率高啊,呵呵

#7


int fun(char *ss, char c)
{
    int count = 0;
    char *p;
    while((p=strchr(ss, c)) != NULL) {
        count++;
        ss = p + 1;    
    }
    return count;
}

#8


直接比较就可以了啊
int fun(char *ss, char c)
{
   int icont = 0;
   if(ss==NULL)
      return -1;
   while(*ss!='\0'){
       if(*ss++==c)
          icont++;
   }
   return  icont;
}

#9


int fun(char *ss, char c)
{
    int n = 0; 
    int i;
    if (ss==NULL) {
        printf("error: ss is NULL!\n");
        return 0;
    }

    while (ss[i]) {
        if (ss[i++]==c)
            n++;
    }
    return n;
}

#10



int fun(char *ss, char c)
{
        int n;

        for (n = 0; *ss; ss++)
                (*ss == c) && n++;

        return n;
}

#11


int func(char *ss, char c){
   return (*ss == '\0') ? (0) : ((*ss == c) ? (1 + Func(ss+1, c)) : (Func(ss+1, c)));
}

/* 呵呵  我的就一行   不过  我比较喜欢10楼的代码 */

#12


10楼牛B!!!

#13


呵呵..............