zoukankan      html  css  js  c++  java
  • c语言--字符串

    1.字符串

    表现形式:char ch[5]={'a','b','c','d','e'};

    注意点:

             双引号括起来

             每个字符占用一个字节

             以''表示字符串结束

    int main(int argc, const char * argv[])
    {
        char str[100]="hahahahawewewehelloworld";
        printf("%s
    ",str);
        printf("%s
    ",&str[9]);
        printf("%s
    ",&str[16]);
        return 0;
    }
    

     1.1字符串长度

    注意点: 

            字符串有效长度不包含''

            sizeof 是一个运算符, 求变量或者常量占用内存空间大小

            strlen是一个函数, 求字符串有效字符个数

    int mystrlen(const char * src)
    {
        int i=0;
        while (src[i]!='') {
            i++;
        }
        return i;
    }
    
    int main(int argc, const char *argv[])
    {
        char str[100]="hello world";
        printf("%d 
    ", mystrlen(str));//调用函数求出长度
        printf("%ld 
    ", sizeof(str));
        printf("%ld 
    ", sizeof("hello world"));
        printf("str == %ld 
    ", strlen(str));
        return 0;
    }
    

     1.2字符串拷贝(复制)

    函数:

       strcpy:

       char *strcpy(char *, const char *);

       strncpy:

       char *strncpy(char *, const char *, size_t);

    注意点:

            s1的内存空间足够容纳s2字符串

            strncpy 选择拷贝的字节数, 不一定包含'';

    //自定义拷贝函数
    char *mystrcpy(char *dst, const char *src)
    {
        int i =0;
        while (src[i]) {
            dst[i]=src[i];
            i++;
        }
        dst[i]='';
        return dst;
    }
    int main(int argc, const char *argv[])
    {
        char s1[100];
        char s2[50]="hello world
    ";
    
        //char *str = strcpy(s1, s2);
        //printf("%s
    ",strcpy(s1, s2));
        //printf("%s
    ",str);
        //printf("%s
    ",mystrcpy(s1, s2));
    
        strncpy(s1, s2, 10);
        s1[10]='';
        printf("%s
    ", s1);
        
        return 0;
    }
    

     1.3字符串拼接

    函数:

       strcat:

       char *strcat(char *, const char *);

       strncat:

       char *strncat(char *, const char *, size_t);

       strncat在拼接后的新字符串后会添加一个'';

    //自定义拼接函数
    char *mystrcat(char *s1, const char *s2)
    {
        int i=0,j;
        while (s1[i]) {
            i++;
        }
       //循环拼接操作
        for (j=0; s2[j]!=''; j++) {
            s1[i+j]=s2[j];
        }
        s1[i+j]='';
        return s1;
    }
    int main(int argc, const char *argv[])
    {
        char s1[100]="hello world";
        char s2[50]="wearefriend";
        
        //printf("%s
    ",strcat(s1, s2));
        //printf("%s
    ",mystrcat(s1, s2));
    
        printf("%s
    ",strncat(s1, s2, 5));
        
        return 0;
    }
    

     1.4字符串比较函数

    函数:

    strcmp:

       int strcmp(const char *, const char *);

    strncmp:

       int strncmp(const char *, const char *, size_t);

     s1 > s2 返回一个正数

     s1 == s2 返回0

     s1 < s2 返回一个负数

    //自定义比较函数
    int mystrcmp(const char* s1, const char *s2)
    {
        int i;
        //循环判断到字符串结尾处
        for (i=0; (s1[i]!='')&&(s2[i]!='') ; i++) {
            if (s1[i]==s2[i]) {
                continue;
            }
            else
            {
                break;
                //return  s1[i]-s2[i];
            }
        }
        //返回一个比较数
        return s1[i]-s2[i];
    }
    int main(int argc, const char *argv[])
    {
        char *str1 = "borld";
        char *str2 = "zorld";
        
        //printf("%d
    ", mystrcmp(str1, str2));
        printf("%d
    ", strncmp(str1, str2, 7));
        //char s1[30]="hello world";
        
        return 0;
    }
    

     1.5字符串查找

    函数:

    strchr:

       char *strchr(const char *, int);

    strrchr:

       char *strrchr(const char *, int);

    char *mystrchr(const char *s1, char ch)
    {
        int i=0;
        while (s1[i]) {
            if (s1[i]==ch) {
                break;
            }
            i++;
        }
        return (char *)&s1[i];
    }
    int main(int argc, const char *argv[])
    {
        char str[100]="hello world!";
        
        char *pstr = mystrchr(str, 'l');
        printf("%s
    ", pstr);
        //printf("%s
    ", pstr);
    
        return  0;
    }
    

     1.6查找字符串

    函数:

    strstr:

       char *strstr(const char *, const char *);

    int main(int argc, const char *argv[])
    {
        char str1[100]="helloworld helloworld";
        printf("%p
    ",&str1[strlen(str1)]);
    
    //    char *pstr = strstr(str1, "world");
    //    printf("%s
    ", pstr);
    
        char *p = str1;
        while ((p=strstr(p, "world"))) {
            if (p) {
                printf("%s
    ", p);
                p+=sizeof("world")-1;
            }
        }
        return 0;
    }
    

     1.7字符串分割

    函数:

    strtok:

       char *strtok(char *, const char *);

    int main(int argc, const char *argv[])
    {
        char str[100]="hello world:good-bye:://we^are..friend()ok///";
    //    char *p=strtok(str, ": ");
    //    printf("%s
    ",p);
    //    while ((p=strtok(NULL, ": /^.()-"))) {
    //        printf("%s
    ",p);
    //    }
        char *p = str;
        while ((p=strtok(p, ": /^.()-")))
        {
            printf("%s
    ",p);
            p=NULL;
        }
    //    p = strtok(NULL, ":");
    //    printf("%s
    ",p);
        return 0;
    }
    

     eg.按照空格来分割字符串得到单词数量(不使用系统函数)

    int main(int argc, const char *argv[])
    {
        char str[200];
        scanf("%[^
    ]",str);
        int i=0;
        int flag=1;//标志位
        int cnt=0;//统计数量
        while (str[i]!='') {
            if (str[i]==' ') {
                if (!flag) {
                    flag = 1;
                }
            }
            else
            {
                if (flag) {
                    cnt++;
                    flag =0;
                }
            }
            i++;
        }
        printf("%d
    ", cnt);
    
        return 0;
    }
    
  • 相关阅读:
    HDU 2196 Computer
    HDU 1520 Anniversary party
    POJ 1217 FOUR QUARTERS
    POJ 2184 Cow Exhibition
    HDU 2639 Bone Collector II
    POJ 3181 Dollar Dayz
    POJ 1787 Charlie's Change
    POJ 2063 Investment
    HDU 1114 Piggy-Bank
    Lca hdu 2874 Connections between cities
  • 原文地址:https://www.cnblogs.com/sublimter/p/4161639.html
Copyright © 2011-2022 走看看