黑马程序员——字符串
来源:互联网 发布:Java二叉树的遍历算法 编辑:程序博客网 时间:2024/05/16 01:08
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
字符串
1. 字符和字符处理
1) 复习ASCII码 字符和字符处理函数
c中存储的值65
A-Z 65-90
a-z 97-122
0-9 48-57
2) 使用字符判断函数
3) 使用字符转换函数
tolower
toupper
//字母转化为大写字母
char bc = tolower('A');
printf("%c\n",bc);
bc = toupper('a');
printf("%c\n",bc);
2. 字符串部分
"hello";
char str[] = "hello world";
printf("str = %s\n",str);
//指针指向了一个字符串常量
// 字符串常量本质上是一个地址, 指向其中第一个字符的地址
char *p;
p = "hello world";
printf("p = %s\n",p);
printf("*p = %c\n",*(p+1));
printf("*p = %c\n",p[1]);
printf("p[1] = %c\n",1[p]);
printf("*p = %c\n",*("hello world"+1));
printf("*p = %c\n","hello world"[1]);
printf("*p = %c\n",1["hello world"]);
c中存储的值65
A-Z 65-90
a-z 97-122
0-9 48-57
2) 使用字符判断函数
char c = 'A'; int r; // 需求: 判断一个字母是不是大写字母 // 返回1表示是大写字母 // 返回0表示不是大写字母 r = isupper(c); printf("%d\n",r); c = 'a'; r = islower(c); printf("%d\n",r); /* isdigit(c) 数字字符 isalpha(c) 字母(大小写) isalnum(c) 数字字符和字母 islower(c) 小写字母 isupper(c) 大写字母 isspace(c) //空格类字符(' ') */
3) 使用字符转换函数
tolower
toupper
//字母转化为大写字母
char bc = tolower('A');
printf("%c\n",bc);
bc = toupper('a');
printf("%c\n",bc);
2. 字符串部分
1.什么是字符串
- 简单的字符串”itcast”
- 一个’i’是一个字符
- 很多个字符组合在一起就是字符串了
2. 字符串的初始化
- char a[] = “123”; 和 char a [] = {‘1’,’2’,’3’};的区别,可以比较大小
- “123”其实是由’1’、’2’、’3’、’\0’组成
- “123”的存储分布
- 字符串的输出”%s”,’\0’是不会输出的
"hello";
char str[] = "hello world";
printf("str = %s\n",str);
//指针指向了一个字符串常量
// 字符串常量本质上是一个地址, 指向其中第一个字符的地址
char *p;
p = "hello world";
printf("p = %s\n",p);
printf("*p = %c\n",*(p+1));
printf("*p = %c\n",p[1]);
printf("p[1] = %c\n",1[p]);
printf("*p = %c\n",*("hello world"+1));
printf("*p = %c\n","hello world"[1]);
printf("*p = %c\n",1["hello world"]);
3. 字符串转换函数
需求: "12345" 转化为一个整型 int num = 12345; 思路:
1. atoi函数---把一个字符串转化为整型
2. atof函数
3. strtol("1010",NULL,2)
1. atoi函数---把一个字符串转化为整型
2. atof函数
3. strtol("1010",NULL,2)
//1. atoi函数---把一个字符串转化为整型 char *str = "-12345"; int num; //12345 num = atoi(str); printf("num = %d\n",num); //测试 // "12345abc" // "12345abc12" // "-123" 支持负数 // "+123" //2. atof函数 char *str2 = "12.34567"; double num2; num2 = atof(str2); printf("num2 = %f\n",num2); //一个字符串转化为long, 指定进位 //3. strtol("1010",NULL,2) //二进制数 char *str3 = "1010"; // 第三个参数指定了转化的进制 long num3 = strtol(str3, NULL, 2); printf("num3 = %ld\n",num3);
4. 常用的字符串处理函数的使用
计算字符串长度: strlen(str)
字符串比较 strcmp(str1, str2) //返回值
字符串连接 strcat(dst, src) //空间
//<1>strlen //<2> strcpy 字符串复制拷贝 char str[2]={}; // str存储字符串 "shijie nihao" // 不能这样做 // str = "shijie nihao"; //效果:"shijie nihoa"复制到str中 //细节: 需要注意目标字符串需要有足够的空间 // 否则程序可能"奔溃" strcpy(str, "shijie nihoa"); printf("str = %s\n",str); //<3>字符串比较---比较两个字符串的大小 char *str1 = "helloA"; char *str2 = "helloD"; //需求: 判断这两个字符串是否相同 //解决: 使用strcmp这个函数 //int strcmp(const char *, const char *); int r = strcmp(str1, str2); printf("r = %d\n",r); //返回值: // r = 0, 这两个字符串相同的 // r < 0, 前面字符串比比后面的字符串小 // r > 0, 前面的字符串比后面的大 //<4>字符串的链接 strcat char str[128] = "tian wang gai di hua"; char *src = " xiao ji dun mo gu"; //后面的参数中的字符串拼接到前面字符串的后面 //细节: 前面的数组应该有足够的空间 strcat(str, src); printf("str =%s\n",str);
5. 字符串查找
字符查找(查找最后一个字符)
//字符串查找 char *str = "sheng huo ru ci mei hao, wo que ru ci bao zao, zhe yang bu hao,bu hao"; char c = 'h'; //char *strchr(const char *, int); //char *p = strchr(str, c); char *p = strrchr(str, c); if(p != NULL) { printf("FIND\n"); printf("%c\n",*p); printf("%s\n",p); } //想要在str中查找一个字符zao是否存在 //char*strstr(const char *, const char *); char *q = strstr(str, "zao"); if(q != NULL) { printf("找到了子串\n"); printf("->%s\n",q); }
6. 字符串分割
strtok (token)
"hello world "
//字符串分割 // 分割出每个单词 strtok char str[] = "jin tian-tian.qi hao qing lang"; //参数1: 传入需要分割的字符串 //参数2: 使用那些字符分割这个字符串 char *p = strtok(str, " "); printf("p-> %s\n",p); //strtok第二次开始分割, 第一个参数传入NULL p = strtok(NULL, " "); printf("p-> %s\n",p); p = strtok(NULL, " "); printf("p-> %s\n",p); //如何使用while循环和strtok分割字符串 //细节: strtok会把字符串中的分隔符置为'\0' //细节: 第二个参数中传入多个分隔符组成的字符串 char *p = strtok(str, " -."); while (p) { printf("p->%s\n",p); p = strtok(NULL, " -."); } printf("str = %s\n",str);指针数组掌握
1. 顺序输出
2. 逆序输出
3. 找到最长单词
4. 排序
7. sprintf 和 scanf
字符串和其他数据转化字符串转化为其他类型
atoi
atof
strtol
需求: 把其他类型转化为字符串
int age=20;
int sex='B';
"20,B"
使用sprintf
// 需求: 把其他类型转化为字符串 int age=20; int sex='B'; // 转化为 "20,B" // printf干的事情 // (1)输入的数据转化为字符串 // (2)输出这个字符串 //printf("%d,%c",age,sex); char str[256]={}; // 把其他类型的数据, 以指定的格式 // 转化为字符串之后存储到str中 sprintf(str, "%d,%c",age,sex); printf("str = %s\n",str); //sscanf函数 char *info = "zhangsan,B,12,80.5"; char name[256]={}; char gender; int myage; float score; //把info以"%s ,%c,%d,%f"分解出出来 // 把数据放到name,gender .... sscanf(info, "%[^,],%c,%d,%f",name,&gender,&myage,&score); printf("name = %s\n gender =%c myage = %d score = %f",name,gender,myage,score); <br clear="none" />
8. 常用字符串处理函数的实现
如何实现
strrchr 字符串中查找匹配的最后一个字符
#import <Foundation/Foundation.h>// strchr 函数char *myStrchr(const char *str,char a){ char *p=(char *)str; while(*p){ if(*p==a){ return p; } p++; } return NULL; }//strrchr 函数 字符串中查找匹配的最后一个字符//"hello world"//'0'//每次都寻找比较o这个字符,如果找到了,不立即返回,而是继续找下一个指定字符//循环最后在返回最后一个字符的位置char *mystrrchr(const char *str,int a){ char *q=NULL; char *p=(char *)str; while (*p) { if (*p==a) { q=p; } p++; } return q;}int main(int argc, const char * argv[]){ @autoreleasepool { // strchr 字符串中查找字符串 // 习惯:通过一个函数的原型指定函数的使用方法 // 函数原型:char *strchr(const char *,int); char str[234]="hello world jin tian tian qi hen hao",a; scanf("%c",&a);// char *p = myStrchr(str, a);// if (p) {// printf("FIND\n");// puts(p);// } char *p = mystrrchr(str,a); if (p) { printf("FIND\n"); puts(p); } } return 0;} strlen 计算字符串长度#import <Foundation/Foundation.h>//strlen 计算字符串长度//传入参数”hello“//返回 5long mystrlen(const char *str){ char *p=(char *)str; long count =0; while (*p) { p++; count++; } return count;}int main(int argc, const char * argv[]){ @autoreleasepool { char str[23]="hello"; long count=mystrlen(str); printf("%ld\n",count); } return 0;}
示例 strcpy 复制字符串
//思路:应该有两个指针:第一个指针指向源字符串char *p;// 第二个指针指向目标字符串,char *q;// 复制:*q=*p;// 结束条件:源字符串字符为”\0“,结束;//功能:源字符串复制到目标字符中//参数1:目标字符串://参数2:源字符串//返回值:返回传入的目标字符串的地址:
#import <Foundation/Foundation.h>// 重点:strcpy 复制字符串//char *str='"hello world"//char buf[]={};//一个一个字符拷贝//char buf[]="hello world";char *mystrcpy(char *dst,const char *src)//const 不能改变*src{ //char *q=(char *)src; //char *p=dst; //while 循环完之后,dst指向‘\0’的后面 char *p=dst; while ((*dst++ = *src++));//括号里面还可以(*src)(*p) /*{ //源字符串字符,复制给目标字符串; // *dst=*src;(可有可无) //dst++; //src++; }*/ //*dst='\0'; //return dst; //保存返回的目标字符串的指针; return p;//返回值目的:支持链式表达}int main(int argc, const char * argv[]){ @autoreleasepool { char str[23]="hello"; char buf[234]=""; mystrcpy(buf, str); puts(buf); } return 0;}
示例 strcmp 比较字符串
#import <Foundation/Foundation.h>//strcmp 比较字符串//思路:判断这两个字符串是否相同//”helloA“//”helloD“//两个字符串逐个比较,一旦发现不同,立即返回差值;//比较的退出条件:(1)如果任意一个字符串达到了结尾,退出比较// (2)或者两个字符是不同的,无需比较,退出比较// 循环完成之后,返回结果(大于0,==0,小于0)char mystrcmp(const char *str,const char *buf){ //while ((str&&buf)&&(*str==*buf)) { while (str&&(*str==*buf)) { str++; buf++; } return *str-*buf;}int main(int argc, const char * argv[]){ @autoreleasepool { char str[23]="hello"; char buf[234]="helloA"; mystrcmp(str, buf); int r=mystrcmp(str, buf); printf("%d",r); } return 0;}
示例 strcat 连接字符串
#import <Foundation/Foundation.h>//strcat 连接字符串//char str1[124]="hello";//char str2[]="world"//str2这个字符串附加到str1的后面//strcat(str1,str2)//参数dst:表示目标字符串://参数src:表示源字符串//返回值:返回传入函数中的目标字符串的地址://原理:“hello” + “world” = “hello world”//两步:(1)找到目标字符串结尾‘\0’的位置 (2)把源字符串复制到目标字符串的结尾://char *mystrcat(char *dst,const char *src){ char *p=dst; //找到目标字符串的结尾‘\0’的位置 while (*dst) { dst++; } //dst<---src //src起始位置的 字符串拷贝到dst起始位置; while((*dst++=*src++)); return p;}int main(int argc, const char * argv[]){ @autoreleasepool { char str1[123]="hello "; char str2[123]="world"; mystrcat(str1, str2); puts(str1); } return 0;} <br clear="none" />
示例 strstr 字符串中查找字符串
#import <Foundation/Foundation.h>//strstr 字符串中查找字符串//函数用法:char *str=“shi jie ni hao”//char *substr="jie"//在str这个字符串中查找substr的位置//char *p=strstr(str,substr);//原理:“shi jie ni hao”// jie 逐个比较//参数str,表示传入的主字符串//参数substr,表示传入的字符//返回值:返回substr在str中的位置char *mystrstr(const char *str,const char *substr){ long len = strlen(substr); while (*str) { //puts(str); //puts(substr); //puts(""); //比较str和substr的前三个字符是否相同 //如果相同,说明找到了子串; //strncmp()比较两个字符串的前n个字符 if (strncmp(str, substr, len)==0) { return str; } str++; } return NULL;}int main(int argc, const char * argv[]){ @autoreleasepool { char str[234]="shi jie ni hao"; char substr[234]="jie"; char *p=mystrstr(str,substr); if (p) { printf("FIND\n"); printf("p=%s\n",p); } } return 0;}
示例 atoi 函数 功能字符串转化为整数
#import <Foundation/Foundation.h>//实现stoi函数//char str[]="12345";//int num=stoi(str);//原型:int atoi(const char *);//原理: "1" '1'-'0'=1 //"12" '2'-'0'=2 1*10+2=12 //"123" '3'-'0'=3 12*10+3=123 //"1234" '4'-'0'=4 123*10+4=1234 //num=num*10+(*str-‘0’)int myatoi(const char *str){ int num=0; int flag = 1; //如果第一个字符是 '-' if(*str == '-') { flag = -1; str++; } if(*str == '+') { str++; } while (*str) { //*str 每次都是其中的数字字符 num=num*10+(*str-'0'); str++; } return num*flag;}int main(int argc, const char * argv[]){ @autoreleasepool { char str[123]="12345"; int num=myatoi(str); printf("%d",num); } return 0;}#import <Foundation/Foundation.h>int main(int argc, const char * argv[]){ @autoreleasepool { //有一个字符串 //char str[]="ren you bei huan li he,yue you yin qing yuan que"; //(1)输出每个单词:------使用strock分割// char str[]="ren you bei huan li he,yue you yin qing yuan que";// char *p=strtok(str, " ,");// while (p) {// printf("p=%s\n",p);// p=strtok(NULL, " ,");// } //(2)所有的单词逆序输出--- //(3)找到最长的单词 //(4)所有单词排序后输出 // 指针数组的基本用法// int a[12];// char b[12];// char *b[12];// char *a[3]={};// a[0]="abc";// a[1]="def";// a[2]="ghi";// puts(a[0]); char str[128]="ren you bei huan li he,yue you yin qing yuan que"; char *a[128]={}; int count=0; //分割出得单词的个数; char *p=strtok(str, " ,"); while (p) { a[count]=p; count++; p=strtok(NULL, " ,"); } //for (int i=0; i<count; i++) { for (int i=count-1; i>=0; i--) { puts(a[i]); } } return 0;}
0 0
- 黑马程序员—字符串
- 黑马程序员—字符串
- 黑马程序员——字符串
- 黑马程序员——字符串
- 黑马程序员——字符串
- 黑马程序员——字符串
- 黑马程序员——字符串
- 黑马程序员——字符串
- 黑马程序员—String字符串
- 黑马程序员—字符串练习
- 黑马程序员—字符串函数
- 黑马程序员——字符串各种操作
- 黑马程序员——实现字符串反转
- 黑马程序员——JAVA中的字符串
- 黑马程序员——字符串总结
- 黑马程序员——数组和字符串
- 黑马程序员——字符串2:练习
- 黑马程序员——Java基础---字符串
- emulator: ERROR: x86 emulation currently requires hardware acceleration!Please ensure Intel HAXM is
- jquery事件学习(普通,表单事件,及绑定和移除)
- 在MFC上显示OPENCV
- dwr上传文件
- Linux Source命令和 ./的区别
- 黑马程序员——字符串
- 背景图片自适应大小(css3)
- uboot移植与源码分析总结(3)-Serial驱动分析
- Android------Activity风格:背景透明、半透明、模糊
- 关于连接查询( join/left join )
- ubuntu14.10下为Django项目安装调试工具django-debug-toolbar
- document.cookie的使用
- mysql函数GET_LOCK
- Java中 package 分析