C语言的一道题目,求大神进?

实现函数:int findchar(char **strings, int num, char value);在字符串列表strings中查找特定字符value,返回匹配到的字符串个数。如:
字符串列表:
“123ASDFG”,
“QWRTYOIA”,
”ZXCVNMG”
num就是3行,findchar需要查找3行字符串,查找字符’G’时,返回2。查找字符L时,返回0. (可利用2维数组和指针来完成)
这题怎么编写?主要char **stings不会用

int findchar(char **strings, int num, char value){
    int i, j, n = 0;
    for(i=0; i<num; i++)
        for(j=0; strings[i][j]; j++)
            if(strings[i][j] == value){
                n++;
                break;
            }
    return n;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-24

int findchar(char **strings, int num, char value)
{
    int counts = 0;
    if ( strings == NULL
        || num <= 0 )
    {
        return counts;
    }

    char *pos = NULL;
    for (int i = 0; i < num; i++)
    {
        pos = strings[i];
        while (pos = strchr(pos, value))
        {
            pos++;
            counts++;
        }
    }

    return counts;
}

int main()
{
    char* s[] = { "123ASDFG",
        "QWRTYOIA",
        "ZXCVNMG" };

    int n = findchar(s, 3, 'G');
    printf("%d\n", n);

    return 0;
}

追问

大神,最后一个问题,为什么 char* s[ ]能传给形参 char **strings。而s[ ][ ]就不行,*s[ ]和s[ ][ ]不是一样的吗?

本回答被提问者采纳
第2个回答  2014-11-24
自然界没有风风雨雨,大地就不会春华秋实。
第3个回答  2014-11-24
代码怎么写我就懒得敲了,我只是闲的无聊回答你的问题。
只跟你解释char **stings的用法
char **stings 即指向(char类型指针)的指针,本质上还是一个指针。
我们分开来讨论,先讲括号里面的.
即char类型指针,如果你学了点指针的知识,你应该知道含义,当然,如果你不懂也没关系,只要知道,数组名也是一个char类型的指针,所以char类型指针可以等同于char[],即代表一个数组。
而指向char类型指针的指针,这个时候你可以会比较晕,但是按照上面的推测,既然在char类型指针中,我们可以把指针二字换成数组。那么同样的,在指向char类型指针的指针中,我们也可以把指针二字换成数组的数组,什么是数组的数组?你别迷糊,数组的数组不就是二维数组么?
以上 我们可以知道:char** stings 就是一个二维数组,stings就是一个数组名
当你写了 char a[3][3]这个二维数组后,想把这个这个数组作为参数传给某个函数时
参数就可以写为char** stings
你在用的时候可以这么用,比如想读取第一行第一列 则可以这样写stings[0][0].追问

大神,那个能加个Q吗

第4个回答  2014-11-24
char *pstr[]={
“123ASDFG”,
“QWRTYOIA”,
”ZXCVNMG” };
int findchar(char **strings, int num, char value);

findchar( pstr, 3, 'G' );
这样用就可以了!本回答被网友采纳

C语言的一道题不会做了,求大神帮一下
第一题: a=4,b=8, 所以 (b==a) 为假,假就是 0,c= (b==a); c 得 0。语句中 a,b 数值 未发生过变化,保持初始值 a=4,b=8。所以输出 a,b,c 印出: 4,8,0 第二题:输入58,a=58;a>50 的条件成立,输出a值,印58 a>40 的条件成立,输出a值,印58 a>...

一道c语言题目 求大神指点下算法?
根据题意,随机生成红绿蓝球任意个数,并任意顺序排列。这里采用随机数实现。统计按红绿蓝顺序排列最少交换次数,我的思路是:第一步:循环将最后一个红色球与最靠前的其它两色球(并且满足位置在红球之前)交换。第二步:循环将最后一个绿球与最靠前的蓝球(必须在绿球之前)交换。include <stdio.h> ...

C语言试题啊,求大神帮忙答案啊!
这个题目容易,没有指定当然是自动指定的了。本题答案为a。另外一个小知识,我们平常看到的int a,b,c;实际上省略了auto,全部应该是 auto int a,b,c;题号:7 以下程序的运行结果是( )void sub (int x,int y,int *z){*z=y-x;}main(){int a,b,c;sub (10,5,&a);sub(7,a,...

C语言问题求大神详细解析
c错 函数的声明返回值为int,定义返回值为void 不相符 d正确

c语言的题,求大神解答
选择的答案都是对的 题1:i++先进行表达式运算,最后再自增;++i先自增,再进行表达式运算,从结果上看最终都会导致i+1,所以结束后i,j,k都分别加1了。题2:C的写法就是强制类型转换,a1+a2的结果本来还是int,但是被强制转换成了char。A、B是普通的加法运算,D是可以说是赋值运算 ...

C语言题目,求大神解答
p=aa;\/\/p指向数组aa首地址,即a的位置 当i=0时,会执行 if ( i==0 ) aa[i][i+1]=**(p++); \/\/这时p=p+1,p指向了aa数组的第二行首地址,即d所在位置,所以,printf("%c\\n", **p ); 输出d 答案为C

一道C语言题目,看图~大神帮忙解答下吧!急急急急急!!在线等
答案是D 在C语言中数组赋值可以如A,那样,【】里面定义了长度5{}中有最大不超过5个值,则赋值成功 B在5个数值之内所以也是正确的 答案C,就是另外中赋值方法,在【】中不定义长度,因此数组a[]的实际长度取决于{}中的值的数量,也就是说在C答案中有5个0作为数值,因此C答案中的a[]的实际...

有一套C语言的题,求大神解答啊……
10选D,d+2代表数组第三个地址,* 然后取这个地址的值 11选B,式子x=y的值是X 是非零 所以会一直是IF 为真的情况 正确的是X==y,编译器出不出错不一定 12选B 13选D 14.A 15.D C语言中不允许作嵌套的函数定义。16.C 啥叫自动,不定义就自动呗 17.A c没有这毛病 习惯上宏名用...

C语言题目!!求大神!! 求过程!!
函数f(p,t)中,前面两行是把p和t所指向的内容互换,也就是说,第一次执行的时候是把c和e互换,然后s指指针向后移动,也就是指向f所在单元,t指指针向前移动,也就是指向b,判断s指向的内容是否为空,此时s不为空,所以继续执行f(p,t),这是递进。以此类推,s逐渐后移,t逐渐前移,直到s...

有一个c语言的问题不会,求大神指教!!
比如a=1, b =2; b=b+(a++),做完这个 b = 3, a =2;也就是说a++是在做完运算以后才+1的 如果是 b=b+(++a),则做完运算后,b=4, a=2.好像是这样,而++a是在a加完1后才参与运算的。仿佛是这样,我是来混红包的。

相似回答