具体见书的第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; }