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