文档章节

c语言strrindex

好铁
 好铁
发布于 2014/09/13 18:07
字数 339
阅读 208
收藏 3
c
k&r习题4-1,返回字符串t在s中最右边出现的位置,我写出了两种解决办法
#include<stdio.h>

int strrindex(char s[], char t[])
{
    int i,j,k,m,n;
    m=strlen(s)-1;
    n=strlen(t)-1;
    for(i=m;i>0;i--){
        for(j=i,k=n;k>0 && s[j]==t[k];j--,k--)
            ;
        if(k==0)
            return i-n;
    }
    return -1;
}

int strrindex2(char s[], char t[])
{
    int i,j,k;
    for(i=strlen(s)-strlen(t);i>=0;i--){
        for(j=i,k=0;t[k]!='\0' && s[j]==t[k];j++,k++)
            ;
        if(t[k]=='\0' && k>0)
            return i;
    }
    return -1;
}



第二个和机械工业版中文答案一样,s逆序,t顺序;第一个s和t都是逆序移动。
答案书还有一个方法,就是修改原来那个strindex,增加一个变量记录位置,这样最后一次记录的位置就是最右边的了,特点是效率低,但可读性好


下面是测试程序,将上面代码保存,与测试程序一块编译即可:
/* compile with strrindex.c
 */

#include <stdio.h>
#define MAXLINE 100

int my_getline(char line[], int max);
int strrindex(char source[], char searchfor[]);
int strrindex2(char source[], char searchfor[]);

char pattern[]="stupid";

main()
{
    char line[MAXLINE];
    int pos=-1;
    while(my_getline(line,MAXLINE)>0) 
        if((pos=strrindex(line,pattern))>=0){
            printf("position is %d\n",pos);
        }else
            printf("not find\n");

    return 0;
}
            

int my_getline(char s[], int lim)
{
	int c, i;

	for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n';
	     ++i)
		s[i] = c;
	if (c == '\n') {
		s[i] = c;
		++i;
	}
	s[i] = '\0';
	return i;
}




© 著作权归作者所有

上一篇: atof函数扩充
下一篇: c语言itob函数
好铁
粉丝 39
博文 267
码字总数 78926
作品 0
朝阳
程序员
私信 提问
分享27本关于C语言方面的学习书籍(免费下载)

分享27本关于C语言方面的学习书籍(免费下载) 1、C语言常见问题集 2、C语言程序设计(第三版) 3、C语言高级编程技术 4、C语言基础 5、C语言入门经典(中文版) 6、C语言深度解剖 7、C语言字符数...

邓剑彬
2012/12/03
1K
8
为什么大学学编程首先学C语言,学的什么程度可以就业,就业可以干嘛?

导读 从大学开始学习编程,学的就是C语言,未来很多人学习其他语言,但是为什么我们要先学C语言呢? 学习C语言有什么好处?自从学习了别的语言之后,就感觉C语言白学了,学了有什么用?在未来...

你的社交帐号昵
2018/05/30
0
0
想做程序员,C语言可以开发哪些项目?

(1)C语言是面向过程的,而C++是面向对象的 (2)C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运...

小辰GG
2017/12/21
0
0
[iOS]C语言知识点系列视频整理

C语言知识点系列视频 目录 C语言技术视频-01-变量的定义 C语言技术视频-02-程序分支结构(if...else) C语言技术视频-03-程序分支结构(switch) C语言技术视频-04-程序循环结构(while{}) C语言技...

浩浩老师
2015/10/13
67
0
C语言书籍资料汇总

我汇总出自己收藏的C语言方面的书籍资料,方便后期使用,或许你也用的到。 以下内容,有链接的都可以下载。 一、书籍 元老级别的书籍: C程序设计语言.pdf (c语言之父) C Primer plus 第5...

BjarneCpp
2017/11/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis + Ehcache 二级缓存实例

二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕...

xiaolyuh
18分钟前
4
0
Spring源码学习(二)哎呦,按菜谱做菜与AbstractAutowireCapableBeanFactory.createBean流程差不多

记得跟老婆谈恋爱时,有一天心血来潮给老婆做饭,按照菜谱一步一步的做,结果差点把厨房烧了!!! 这事至今老婆还记得。 入口 上一篇说了,AbstractBeanFactory.getBean的主流程 ,今天来说下...

温安适
20分钟前
34
0
前端UI攻城狮 你们该抛弃jQuery了

你不再需要jQuery! Web工程师太依赖jQuery了,某种意义上说jQuery已经成了JavaScript的同义词。但是我们真的需要他么?或许我们应该反思一下什么时候才真的需要jQuery。 对我个人而言开始使...

前端老手
21分钟前
5
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
今天
6
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部