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函数.
另外,提醒一下楼主主函数里的输入,
printf("\nPlease enter a string: "); gets(a);
printf("\nPlease enter a char: "); ch=getchar(); //这里输入前最好先清空键盘缓冲.因为前面gets的输入后,键盘缓冲区里还留有一个回车.这时读取的将会是回车符,而不会接受键盘输入.
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;
}
{
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;
}
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;
}
{
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楼的代码 */
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函数.
另外,提醒一下楼主主函数里的输入,
printf("\nPlease enter a string: "); gets(a);
printf("\nPlease enter a char: "); ch=getchar(); //这里输入前最好先清空键盘缓冲.因为前面gets的输入后,键盘缓冲区里还留有一个回车.这时读取的将会是回车符,而不会接受键盘输入.
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;
}
{
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;
}
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;
}
{
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楼的代码 */
return (*ss == '\0') ? (0) : ((*ss == c) ? (1 + Func(ss+1, c)) : (Func(ss+1, c)));
}
/* 呵呵 我的就一行 不过 我比较喜欢10楼的代码 */
#12
10楼牛B!!!
#13
呵呵..............