您的位置:首页 > 编程语言

C和指针之字符串编程练习8实现char *my_strnchr(char const *str, int ch, int which)

2017-11-21 23:00 459 查看

1、问题

编写函数类似strchr函数,但是它有3个参数,第三个参数是1, 这个函数的功能就和strchr完全一样,

如果第三个参数是2,这个函数就返回一个指向ch字符在str字符串第二次出现的位置的指针,以此类推

2、代码实现

1 #include <stdio.h>
2 #include <string.h>
3
4 /**
5 编写函数类似strchr函数,但是它有3个参数,第三个参数是1, 这个函数的功能就和strchr完全一样,
6 如果第三个参数是2,这个函数就返回一个指向ch字符在str字符串第二次出现的位置的指针,以此类推
7 **/
8 char *my_strnchr(const char *str, int ch, int which)
9 {
10 if (which <= 0)
11 return str;
12 for (int i = 0; i < which; ++i)
13 {
14 if (str != NULL)
15 {
16 str = strchr(str, ch);
17 //最后一次出现不需要指针向右移动
18 if (i != which -1)
19 {
20 //如果which的次数比ch出现的多
21 //直接返回str
22 if (str == NULL)
23 return str;
24 //记得每次找到之后指针要向右移动一下
25 //不然每次都是打印一样的结果
26 str++;
27 }
28 }
29 }
30 return str;
31 }
32
33
34 int main()
35 {
36 //这里str指针是可以变的,因为不是指针常量
37 const char *str = "chenyuchenyuchenyu";
38 char ch = 'c';
39 for (int which = 1; which <= 5; ++which)
40 {
41 printf("my_strnchr('chenyuchenyuchenyu', %c, %d) is %s\n", ch, which, my_strnchr(str, ch, which));
42 str = "chenyuchenyuchenyu";
43 }
44 return 0;
45 }

3、运行结果

$ vim my_strnchr.c
$ gcc -g -w my_strnchr.c -o my_strnchr
$ ./my_strnchr
my_strnchr('chenyuchenyuchenyu', c, 1) is chenyuchenyuchenyu
my_strnchr('chenyuchenyuchenyu', c, 2) is chenyuchenyu
my_strnchr('chenyuchenyuchenyu', c, 3) is chenyu
my_strnchr('chenyuchenyuchenyu', c, 4) is (null)
my_strnchr('chenyuchenyuchenyu', c, 5) is (null)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐