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


    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
    ",p);
        //字符串赋值
        //memcpy(p, "helloworld", 10);//方法一:内存拷贝
        sprintf(p,"%s","helloworld");//方法二:sprintf()输出赋值
        //p = "helloworld";//错误,p指向常量区,把申请的内存都丢了
        printf("p=%p
    ",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
    ",isalnum('1'));//1
     5     printf("%d
    ",isalpha('1'));//0
     6     printf("%d
    ",isdigit('a'));//0
     7     printf("%d
    ",islower('A'));//0
     8     printf("%d
    ",isupper('a'));//0
     9     printf("%d
    ",isxdigit('F')); //1
    10     printf("%c
    ",tolower('A'));//a
    11     printf("%c
    ",toupper('a'));//A
    12     printf("%d
    ",digittoint('1'));//1
    13     printf("%d
    ",ishexnumber('a'));//1
    14     printf("%d
    ",isnumber('a'));//0
    15     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后面的''也拷贝过来.如果接收的字符串空  间不够大,可能会越界 。
     6     printf("%s
    ",str);//从str开始,打印到结束
     7     for(int i=0;i<10;i++){
     8         printf("str[%d]=%c=%d
    ",i,str[i],str[i]);
     9     }
    10     unsigned long len=strlen(str);
    11     strncpy(str,p,len-1);//最后的参数:最大拷贝字符数.一般设置为目的字符串bufsize-1,预留结束符
    12     str[len-1] = '';//数组的最后的一个元素置为结束符
    13     printf("%s
    ",str);//从str开始,打印到结束
    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
    ",rst);//结果:-1
     8     rst = strncmp(p1, p2, 2);//2表示比较的最大长度
     9     printf("rst = %d
    ",rst);//结果:0
    10     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
    ",pRst);
     7     printf("%s
    ",strchr(p,'l'));//正向
     8     printf("%s
    ",strrchr(p,'l'));//逆向
     9     pRst = strstr(p,"china");
    10     printf("%s
    ",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
    ",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
    ",len,str);
    10     return 0;
    11 }

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

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

    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
    ",strpbrk(p1,p2));//'l'在p2也有,'l'是2个字符串的第一个公共字符,返回在p1中的地址
    6     char *p3 = "lehRwsrt";
    7     printf("%lu
    ",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
    ",a);
     5 
     6     double d;
     7     d=atof("122dsf3.34f4");
     8     printf("d=%.3f
    ",d);
     9 
    10     long l;
    11     l=atol("23454df3556s");
    12     printf("l=%ld
    ",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!='') {
    15         p++;
    16     }
    17 
    18     while (*ct!='') {
    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 }
  • 相关阅读:
    Edge浏览器主页被360劫持怎么办 ?
    wpf小技巧——datagrid 不出现 滚动条问题
    c++学习资料
    Mosquitto创建MQTT服务器提示Starting in local only mode的解决办法
    【转】在 Golang 中使用 Cobra 创建 CLI 应用
    【转】Golang的HTTP操作大全
    BigDecimal类中的3个toString方法
    Path is not a working copy directory
    Cannot deserialize instance of `java.lang.String` out of START_OBJECT token
    sqlserver判断字符串是否是纯数字
  • 原文地址:https://www.cnblogs.com/ChinaKingKong/p/4606016.html
Copyright © 2020-2023  润新知