《嗨翻C语言》随书练习二 字符串
编辑时间:2017-03-26 作者:金满斗 浏览量:1536 来源:原创

具体见书的第2.5章节。

直接上代码吧

/* 《嗨翻C语言》随书练习 2-5章 字符串   2016-12-01
	xiousheng@126.com 
*/ 
 
#include <stdio.h>       //输入输出函数库 
#include <string.h>     //字符串处理函数库 
 
//定义歌曲名二维数组 
char gemin[][80] = {
"再见啊郎","路边的野花不要采",
"男儿当自强",
"光辉岁月",
"暗自着迷","霸王别姬",
"你的眼神",
"月亮之上" 
}; 
 
 
//搜索函数,注意这是书上例子 
void find_track(char search_for[]){
	int i ;
	int len = sizeof(gemin)/80;    //判断二维数组长度,先取出总长再除每个小数组长度 
	for(i=0;i<len;i++){
		if(strstr(gemin[i],search_for)){
			printf("歌曲 %i:'%s'\r\n",i,gemin[i]);
		}
	}	
} 
 
//自己改装,传递三个参数 (2维数组,二维数组长度,搜索关键词) 
void find_track1(char gemin[][80],int len,char search_for[]){
	int i ;
	for(i=0;i<len;i++){
		if(strstr(gemin[i],search_for)){
			printf("歌曲 %i:'%s'\r\n",i,gemin[i]);
		}
	}	
} 
 
//倒过来显示字符串
void print_reverse(char *s){
	size_t len = strlen(s) ;    //字符串长度 
	char *t = s + len -1 ;     //t地址等于字符串地址加长度-1.相当于到了字符串尾部
	while(t >= s) {
 		printf("%c",*t);
 		t = t - 1;      
	}
	puts("");
	
} 
 
 
 
 
int main(){
	//点歌机 
	char search_for[80];
	printf("请输入要搜索歌名关键字:\r\n");
	fgets(search_for,80,stdin);
	search_for[strlen(search_for)-1] = '\0' ;
	find_track(search_for);   //例子自带的
	//由于现在一般不赞成大量的调用全局变量,因此做下改装,传递本身的歌曲二维数组和要搜索的歌曲 ,由于 二维数组传过去是指针了,不能判断
	//长度,还加上长度 
	int len = sizeof(gemin)/80;    //判断二维数组长度,先取出总长再除每个小数组长度 
	find_track1(gemin,len,search_for);
	
	
	//倒显示字符串
	char wo[] =  "wodeqinbi";      //因为这里涉及到编码的问题,因此只能英文,中文倒显示字就不好看了 
 	print_reverse(wo);
	
	//字符串定义   wo[] 和 *wo 定义的意思一样,指针都指向字符串首字符。 
	
	
	
	return 0 ;
}
 
 
 
/* 一些常用的文本处理函数
strchr() 在字符串中查找字符
strcmp()   比较字符串
strstr()  在字符串中查找字符串 
strcpy()  复制字符串
strlen()  返回字符串长度
strcat()  连接字符串 
 
*/

补充点内容,关于字符串和指针的

#pragma warning(disable: 4996)
#include <stdio.h> 
 
int main()
{
	//字符串和指针字符串的区别
	char c[100] = "wo de ta";
	char *cp = c;
	printf("%p,%s, %s \n%p,%s, %s\n", &c, &c, c, &cp, &cp, cp);  //注意看,一个直接变量地址就是文本,而一个存的是却是变量地址
	//问题简化就是这样
	char *a = "wode dage";
	char *b = "wode2222";
	char **p1;      //二级指针,指向字符串的指针
	char **p2;
	p1 = &a;          //这里存的是字符串的位置的变量地址
	p2 = &b;
	printf("%s\n%s\n",*p1,*p2);
	//下面二级指针对换下,让输出的结果看起来对调
	p1 = &b;
	p2 = &a;
	printf("%s\n%s\n", *p1, *p2); 
	getchar(); 
	return 0;
}


来说两句吧