首页 > 学院 > 开发设计 > 正文

iOS阶段学习第十天笔记(字符串操作)

2019-11-14 18:46:35
字体:
来源:转载
供稿:网友

iOS学习(C语言)知识点整理

一、字符串的操作

 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

 实例代码:

 1 #include <ctype.h> 2 int main() 3 { 4     printf("%d/n",isalnum('1'));//1 5     printf("%d/n",isalpha('1'));//0 6     printf("%d/n",isdigit('a'));//0 7     printf("%d/n",islower('A'));//0 8     printf("%d/n",isupper('a'));//0 9     printf("%d/n",isxdigit('F')); //110     printf("%c/n",tolower('A'));//a11     printf("%c/n",toupper('a'));//A12     printf("%d/n",digittoint('1'));//113     printf("%d/n",ishexnumber('a'));//114     printf("%d/n",isnumber('a'));//015     return 0;16 }

3)字符串拷贝 使用strcpy或strncpy 后者可以指定拷贝长度。

 实例代码:

 1 int main() 2 { 3     char str[20] ="XXXXXXXXXXXXXX"; 4     char *p = "hello"; 5     strcpy(str,p);//从p的位置拷贝字符串,把p后面的'/0'也拷贝过来.如果接收的字符串空  间不够大,可能会越界 。 6     printf("%s/n",str);//从str开始,打印到/0结束 7     for(int i=0;i<10;i++){ 8         printf("str[%d]=%c=%d/n",i,str[i],str[i]); 9     }10     unsigned long len=strlen(str);11     strncpy(str,p,len-1);//最后的参数:最大拷贝字符数.一般设置为目的字符串bufsize-1,预留结束符12     str[len-1] = '/0';//数组的最后的一个元素置为结束符13     printf("%s/n",str);//从str开始,打印到/0结束14 15 }

4)字符串比较函数 strcmp, strncmp  后者可以限定比较字符串的长度,如果相等比较结果等于0,如果s1>s2 结果大于0;

     如果s1<s2 结果小于0;比较结果等于字符串中首个不相等字符的ascii码的差值。

实例代码:

 1 int main() 2 { 3     char *p1 = "helloAworld"; 4     char *p2 = "helloB"; 5     int rst; 6     rst = strcmp(p1, p2); 7     printf("rst = %d/n",rst);//结果:-1 8     rst = strncmp(p1, p2, 2);//2表示比较的最大长度 9     printf("rst = %d/n",rst);//结果:010     return 0;11 }

5)查找字符串函数  

 1、strchr 从左往右正向查找。

 2、strrchr 从右往左逆向查找。

 3、strstr 返回 s2字符串在s1字符串中第一次出现的位置,找不到对应的字串, 返回NULL。

 实例代码:

 1 int main() 2 { 3     char *p = "hello china world"; 4     char *pRst; 5     pRst = strchr(p,'X');//找不到返回NULL 6     printf("%s/n",pRst); 7     printf("%s/n",strchr(p,'l'));//正向 8     printf("%s/n",strrchr(p,'l'));//逆向 9     pRst = strstr(p,"china");10     printf("%s/n",pRst);11     return 0;12 }

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(预留结束符)

实例代码:

 1 int main() 2 { 3     char str[20] = "hello"; 4     strcat(str," world");//在原字符串的末尾,加上新的字符串 5     printf("%s/n",str); 6     int len = (int)strlen(str); 7     strncat(str,"hello world",20-len-1); 8     len = (int)strlen(str); 9     printf("strlen=%d,%s/n",len,str);10     return 0;11 }

7)字符串分割函数 strtok 结构char *strtok(char *src, const char *demi)。

1、strtok 把src字符串中所有的分隔符变成'/0'

2、直接修改原字符串

3、只有第一次调用的时候需要传递字符串的首地址, 从第二次开始需要传递NULL

4、写一个函数实现截取字符串并提取被截断的任一部分字符

 实现代码:

 1 void* splitstr(char *str,char *sp,int index){ 2     char *result = NULL; 3     result = strtok( str, sp ); 4     int num=0; 5     while( result != NULL ) { 6         if(num==index) 7             break; 8         result = strtok( NULL, sp ); 9         num++;10     }11     return  result;12 }13 14 int main(){15     char str[] = "我爱#中华#人民#共和国";16     char sp[] = "#";17     char *spstr=str;18     char *spf=sp;19     char *result = (char*)splitstr(spstr,spf,2);//结果:人民20     printf("%s",result);21     return 0;22 }

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中的字符数

 实例代码:

1 int main()2 {3     char *p1 = "hello world";4     char *p2 = "girl";5     printf("%s/n",strpbrk(p1,p2));//'l'在p2也有,'l'是2个字符串的第一个公共字符,返回在p1中的地址6     char *p3 = "lehRwsrt";7     printf("%lu/n",strspn(p1,p3));//p1中,前4个字符,在p3中也存在8     return 0;9 }

9)提取整数, 以数字开头提取到字母截止 ;实现函数有

   1、atoi 用于提取 int类型数据

   2、atof 用于提取 double,float等浮点型数据

   3、atol 用于提取 long 等长整形数据

 实例代码:

 1 int main(){ 2     int a; 3     a=atoi("2adse"); 4     printf("a=%d/n",a); 5  6     double d; 7     d=atof("122dsf3.34f4"); 8     printf("d=%.3f/n",d); 9 10     long l;11     l=atol("23454df3556s");12     printf("l=%ld/n",l);13     return 0;14 }

10)反转字符串

 实例代码:

 1 char *reverse(char *s){ 2     char ch; 3     unsigned long len=strlen(s); 4     for (int i=0; i<=len/2; i++) { 5         ch=*(s+i); 6         *(s+i)=*(s+len-1-i); 7         *(s+len-1-i)=ch; 8     } 9     return  s;10 }11 12 char *strcat1(char *s,const char *ct){13     char *p=s;14     while (*p!='/0') {15         p++;16     }17 18     while (*ct!='/0') {19         *p=*ct;20         p++;21         ct++;22     }23     return  s;24 }25  26 int main(){27     //反转字符串28     char str[100]="asdfer";29     printf("%s",reverse(str));30     char *qstr="kingkong";31     strcat1(str, qstr);32     printf("%s",str);33     return 0;34 }

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表