iOS 阶段学习第十天笔记(字符串操作)
2015-06-28 20:02
375 查看
iOS学习(C语言)知识点整理
一、字符串的操作
1)字符串的存储,字符数组,在堆里面申请内存空间。
实例代码:
2)字符操作函数, 形参为对应参数的ASCII码值,满足条件返回1,不满足返回0 ; 需要引用头文件#include <ctype.h>
1、int isalnum(int);// 判断是否是数字或者字母
2、int isalpha(int);//判断是否是英文字符
3、int isdigit(int);//判断是否是数字 0~9
4、int islower(int);//判断是否是小写字母
5、int isupper(int);//判断是否是大写字母
6、int isxdigit(int);//是否是16进制数字
7、int tolower(int);//转成小写
8、int toupper(int);//转成大写
9、int digittoint(int);//把十六进制数字字符转换成整型
10、int ishexnumber(int);//等价 isxdigit
11、int isnumber(int);//等价isdigit
实例代码:
3)字符串拷贝 使用strcpy或strncpy 后者可以指定拷贝长度。
实例代码:
4)字符串比较函数 strcmp, strncmp 后者可以限定比较字符串的长度,如果相等比较结果等于0,如果s1>s2 结果大于0;
如果s1<s2 结果小于0;比较结果等于字符串中首个不相等字符的ascii码的差值。
实例代码:
5)查找字符串函数
1、strchr 从左往右正向查找。
2、strrchr 从右往左逆向查找。
3、strstr 返回 s2字符串在s1字符串中第一次出现的位置,找不到对应的字串, 返回NULL。
实例代码:
6)字符串拼接函数
1、strcat, 结构char *strcat(char *dst, const char *src) dst 指向的内存剩余的空间要足够容纳src字 符串,dst src 指向的内存不能重叠。
2、strncat,结构char *strncat(char *, const char *, size_t n) size_t n: 最大拼接字符个数//数组的长度-当前的有效个数-1(预留结束符)
实例代码:
7)字符串分割函数 strtok 结构char *strtok(char *src, const char *demi)。
1、strtok 把src字符串中所有的分隔符变成'\0'
2、直接修改原字符串
3、只有第一次调用的时候需要传递字符串的首地址, 从第二次开始需要传递NULL
4、写一个函数实现截取字符串并提取被截断的任一部分字符
实现代码:
8)检索字符串
1、strpbrk 函数;结构为 char *strpbrk(const char *s1, const char *s2);依次检索s1中的字符,
当s2中也包含时,停止检索,并返回该字符位置.
2、strspn 函数;结构为 size_t strspn(const char *s1, const char *s2);//s1中s1开头连续的都在s2中的字符数
实例代码:
9)提取整数, 以数字开头提取到字母截止 ;实现函数有
1、atoi 用于提取 int类型数据
2、atof 用于提取 double,float等浮点型数据
3、atol 用于提取 long 等长整形数据
实例代码:
10)反转字符串
实例代码:
一、字符串的操作
1)字符串的存储,字符数组,在堆里面申请内存空间。
实例代码:
#include <stdlib.h> #include <string.h> int main(){ char str[100] = "hello world"; char *p = "hello world"; //*p ='H';//常量字符串不可以修改,p指向只读的地址 p = str; *p = 'H'; // printf("%s",str); p = (char*)malloc(100); //判空 if(p==NULL) return 0; //清零 memset(p,0,100); printf("p=%p\n",p); //字符串赋值 //memcpy(p, "helloworld", 10);//方法一:内存拷贝 sprintf(p,"%s","helloworld");//方法二:sprintf()输出赋值 //p = "helloworld";//错误,p指向常量区,把申请的内存都丢了 printf("p=%p\n",p); printf("%s",p); //释放 free(p); return 0; }
2)字符操作函数, 形参为对应参数的ASCII码值,满足条件返回1,不满足返回0 ; 需要引用头文件#include <ctype.h>
1、int isalnum(int);// 判断是否是数字或者字母
2、int isalpha(int);//判断是否是英文字符
3、int isdigit(int);//判断是否是数字 0~9
4、int islower(int);//判断是否是小写字母
5、int isupper(int);//判断是否是大写字母
6、int isxdigit(int);//是否是16进制数字
7、int tolower(int);//转成小写
8、int toupper(int);//转成大写
9、int digittoint(int);//把十六进制数字字符转换成整型
10、int ishexnumber(int);//等价 isxdigit
11、int isnumber(int);//等价isdigit
实例代码:
#include <ctype.h> int main() { printf("%d\n",isalnum('1'));//1 printf("%d\n",isalpha('1'));//0 printf("%d\n",isdigit('a'));//0 printf("%d\n",islower('A'));//0 printf("%d\n",isupper('a'));//0 printf("%d\n",isxdigit('F')); //1 printf("%c\n",tolower('A'));//a printf("%c\n",toupper('a'));//A printf("%d\n",digittoint('1'));//1 printf("%d\n",ishexnumber('a'));//1 printf("%d\n",isnumber('a'));//0 return 0; }
3)字符串拷贝 使用strcpy或strncpy 后者可以指定拷贝长度。
实例代码:
int main() { char str[20] ="XXXXXXXXXXXXXX"; char *p = "hello"; strcpy(str,p);//从p的位置拷贝字符串,把p后面的'\0'也拷贝过来.如果接收的字符串空 间不够大,可能会越界 。 printf("%s\n",str);//从str开始,打印到\0结束 for(int i=0;i<10;i++){ printf("str[%d]=%c=%d\n",i,str[i],str[i]); } unsigned long len=strlen(str); strncpy(str,p,len-1);//最后的参数:最大拷贝字符数.一般设置为目的字符串bufsize-1,预留结束符 str[len-1] = '\0';//数组的最后的一个元素置为结束符 printf("%s\n",str);//从str开始,打印到\0结束 }
4)字符串比较函数 strcmp, strncmp 后者可以限定比较字符串的长度,如果相等比较结果等于0,如果s1>s2 结果大于0;
如果s1<s2 结果小于0;比较结果等于字符串中首个不相等字符的ascii码的差值。
实例代码:
int main() { char *p1 = "helloAworld"; char *p2 = "helloB"; int rst; rst = strcmp(p1, p2); printf("rst = %d\n",rst);//结果:-1 rst = strncmp(p1, p2, 2);//2表示比较的最大长度 printf("rst = %d\n",rst);//结果:0 return 0; }
5)查找字符串函数
1、strchr 从左往右正向查找。
2、strrchr 从右往左逆向查找。
3、strstr 返回 s2字符串在s1字符串中第一次出现的位置,找不到对应的字串, 返回NULL。
实例代码:
int main() { char *p = "hello china world"; char *pRst; pRst = strchr(p,'X');//找不到返回NULL printf("%s\n",pRst); printf("%s\n",strchr(p,'l'));//正向 printf("%s\n",strrchr(p,'l'));//逆向 pRst = strstr(p,"china"); printf("%s\n",pRst); return 0; }
6)字符串拼接函数
1、strcat, 结构char *strcat(char *dst, const char *src) dst 指向的内存剩余的空间要足够容纳src字 符串,dst src 指向的内存不能重叠。
2、strncat,结构char *strncat(char *, const char *, size_t n) size_t n: 最大拼接字符个数//数组的长度-当前的有效个数-1(预留结束符)
实例代码:
int main() { char str[20] = "hello"; strcat(str," world");//在原字符串的末尾,加上新的字符串 printf("%s\n",str); int len = (int)strlen(str); strncat(str,"hello world",20-len-1); len = (int)strlen(str); printf("strlen=%d,%s\n",len,str); return 0; }
7)字符串分割函数 strtok 结构char *strtok(char *src, const char *demi)。
1、strtok 把src字符串中所有的分隔符变成'\0'
2、直接修改原字符串
3、只有第一次调用的时候需要传递字符串的首地址, 从第二次开始需要传递NULL
4、写一个函数实现截取字符串并提取被截断的任一部分字符
实现代码:
void* splitstr(char *str,char *sp,int index){ char *result = NULL; result = strtok( str, sp ); int num=0; while( result != NULL ) { if(num==index) break; result = strtok( NULL, sp ); num++; } return result; } int main(){ char str[] = "我爱#中华#人民#共和国"; char sp[] = "#"; char *spstr=str; char *spf=sp; char *result = (char*)splitstr(spstr,spf,2);//结果:人民 printf("%s",result); return 0; }
8)检索字符串
1、strpbrk 函数;结构为 char *strpbrk(const char *s1, const char *s2);依次检索s1中的字符,
当s2中也包含时,停止检索,并返回该字符位置.
2、strspn 函数;结构为 size_t strspn(const char *s1, const char *s2);//s1中s1开头连续的都在s2中的字符数
实例代码:
int main() { char *p1 = "hello world"; char *p2 = "girl"; printf("%s\n",strpbrk(p1,p2));//'l'在p2也有,'l'是2个字符串的第一个公共字符,返回在p1中的地址 char *p3 = "lehRwsrt"; printf("%lu\n",strspn(p1,p3));//p1中,前4个字符,在p3中也存在 return 0; }
9)提取整数, 以数字开头提取到字母截止 ;实现函数有
1、atoi 用于提取 int类型数据
2、atof 用于提取 double,float等浮点型数据
3、atol 用于提取 long 等长整形数据
实例代码:
int main(){ int a; a=atoi("2adse"); printf("a=%d\n",a); double d; d=atof("122dsf3.34f4"); printf("d=%.3f\n",d); long l; l=atol("23454df3556s"); printf("l=%ld\n",l); return 0; }
10)反转字符串
实例代码:
char *reverse(char *s){ char ch; unsigned long len=strlen(s); for (int i=0; i<=len/2; i++) { ch=*(s+i); *(s+i)=*(s+len-1-i); *(s+len-1-i)=ch; } return s; } char *strcat1(char *s,const char *ct){ char *p=s; while (*p!='\0') { p++; } while (*ct!='\0') { *p=*ct; p++; ct++; } return s; } int main(){ //反转字符串 char str[100]="asdfer"; printf("%s",reverse(str)); char *qstr="kingkong"; strcat1(str, qstr); printf("%s",str); return 0; }
相关文章推荐
- 监控系统nagios+nconf+pnp4
- iOS交叉编译
- iOS开发--漫谈内存管理(一)
- iOS开发基础笔记-算法<三>
- iOS 阶段学习第十天笔记(结构体)
- ios8.3 越狱之后,没有ps,top等命令
- 解决iOS Xcode 模拟器键盘不弹出
- iOS 并行开发技术之 NSOperation && GCD
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- iOS日志获取
- iOS 单元测试之XCTest详解(一)
- 在iOS 中创建自定义Delegates properties with ARC错误的解决方法
- 苹果开发 笔记(42)leftBarButtonItem
- nagios 安装和配置(含有nrpe结束)所有 (两)
- nagios安装和配置(个人笔记)
- iOS 阶段学习第九天笔记(内存管理)
- iOS 集成环信, 扩展属性, chatcell label 可被点击
- iOS开发学习笔记(二)—— 让图片“动”起来!
- iOS中四种实例变量的范围类型@private@protected@public@package
- iOS block的用法