苟哥的笔记本
首页
文章归档
关于
文章归档
关于
首页
编程
正文
C程序设计语言第2版习题4-1
苟哥
2019-06-24 AM
1120℃
0条
#### 问题描述 编写一个函数strrindex(s, t),用于返回字符串t在s中最右出现的位置,如果 s中不 包含t,那么返回-1。 ------ #### 问题分解 - 主函数main - 工具函数 get_line(s, max), 注意不能按照书上的getline,因为getline 已经在头文件stdio.h定义了 - 核心函数 strrindex(source, searchfor)。这道题是根据书中strindex例子进行变化,我们先来看看strindex的程序实现: ```C int strindex(char s[], char t[]) { int i, j, k; for(i = 0; s[i] != '\0'; i++){ for(j = i, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++) ; if(k > 0 && t[k] == '\0'){ return i; } } return -1; } ``` 分析strindex可以发现,这个函数是只要在source中发现searchfor字符串,就返回当前的i,即返回所查找字符串的第一次出现的位置。我们现在要寻找的是最后一次出现的位置,因此我们对strindex进行修改,取消第9行的return,取而代之使用一个变量pos来承接每次出现searchfor的位置,因此pos会及时更新,直到source遍历结束。 ------ #### 代码实现 ```c #include
#define MAXLINE 100 int get_line(char s[], int max); int strrindex(char source[], char searchfor[]); char pattern[] = "ould"; int main() { char line[MAXLINE]; int found = 0, pos; while(get_line(line, MAXLINE) > 0){ if((pos = strrindex(line, pattern)) >= 0){ printf("The position is :%d \n", pos); found++; } } return found; } int get_line(char s[], int max) { int i = 0; char c; while(--max > 0 && (c = getchar()) != '\0' && c != '\n'){ s[i++] = c; } if(c == '\n'){ s[i++] = c; } s[i] = '\0'; return i; } int strrindex(char s[], char t[]) { int i, j, k, pos = -1; for(i = 0; s[i] != '\0'; i++){ for(j = i, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++) ; if(k > 0 && t[k] == '\0'){ pos = i; } } return pos; } ``` ------ #### 编译运行 ![4-1.png](http://images.kuryun.com/blog/typecho/4-1.png) 运行结果可看出,达到了预期的。
标签:
C程序设计语言
,
算法
,
C语言
,
习题4-1
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
http://www.i366211.com/archives/52/
上一篇
C程序设计语言第2版习题3-5
下一篇
正确看待递归函数
取消回复
评论啦~
提交评论
栏目分类
软件安装
10
开发工具
8
算法
2
测试
1
架构
3
填坑记
2
开源
6
科普
6
私域
2
读书笔记
4
编程
48
运营
3
管理
1
标签云
算法
C程序设计语言
C语言
Java
mysql
PHP
ffmpeg
golang
VueJs
脚手架
VueJs实战项目
Intellij IDEA
Centos7
Hyperf
抖音运营
杰克韦尔奇
跌荡一百年
生成海量测试数据
企业管理
习题2-3
习题2-4
习题2-6
异常分类
File
习题2-7
习题2-8
习题2-9
习题3-3
习题3-4
习题3-5
友情链接
申请
SaaS引擎
机器人框架
京东捡漏