美文网首页
C语言 字符串

C语言 字符串

作者: 郎官人 | 来源:发表于2018-05-15 18:38 被阅读0次

    在 C 语言中,字符串其实就是一个字符数组。末尾以'\0'结束,如下:

    char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
    

    它也可以写为:

    char greeting[] = "Hello";
    

    或者还可以字符指针来表示:

    char * greeting = "Hello";
    

    用字符数组表示的字符串,可以修改

    void main(){
        char str[10] = "china";
        //可以修改
        str[0] = 's';
    
        printf("%s\n",str);
        printf("%#x\n", str);
        getchar();
    }
    

    输出结果:

    shina
    0xcff98c
    
    

    而用字符指针表示的字符串,是无法修改的:

    void main(){
    
        char *str = "how are you?";
        str += 1;
        *str = 'y';
        getchar();
    
    }
    

    上面这段代码,运行是会报错的,无法通过指针来修改。

    关于字符串,有以下常用函数,需要导入头文件 <string.h>

    • strcpy(s1, s2);:拷贝字符串
    • strcat(s1, s2);:拼接字符串
    • strlen(s1);:获取字符串长度
    • strcmp(s1, s2);:比较,如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
    • strchr(s1, ch);:寻字符索引,返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
    • strstr(s1, s2);:寻字符串索引,返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置

    Sample:

    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
       char str1[12] = "Hello";
       char str2[12] = "World";
       char str3[12];
       int  len ;
    
       /* 复制 str1 到 str3 */
       strcpy(str3, str1);
       printf("strcpy( str3, str1) :  %s\n", str3 );
    
       /* 连接 str1 和 str2 */
       strcat( str1, str2);
       printf("strcat( str1, str2):   %s\n", str1 );
    
       /* 连接后,str1 的总长度 */
       len = strlen(str1);
       printf("strlen(str1) :  %d\n", len );
    
       return 0;
    }
    

    输出结果:

    strcpy( str3, str1) :  Hello
    strcat( str1, str2):   HelloWorld
    strlen(str1) :  10
    

    一些示例:

    //使用指针加法,截取字符串

    void main(){
        //内存连续排列
        char *str = "how are you?";
        str += 3;
        while (*str){
            printf("%c",*str);
            str++;
        }
        printf("\n结束了");
        getchar();
    }
    

    输出:

    are you?
    结束了
    

    strcat字符串拼接函数

    void main(void){
        char dest[50];  
        char *a = "china";
        char *b = " is powerful!";
        strcpy(dest, a);
        strcat(dest, b);
        printf("%s\n", dest);
    
        system("pause");
    }
    

    输出结果:

    china is powerful!
    

    strstr 从字符串haystack中寻找needle第一次出现的位置

    void main(void){
        char *haystack = "I want go to USA!";
        char *needle = "to";
        //U元素的指针
    
        char* p = strstr(haystack, needle);
        if (p){
            printf("索引位置:%d\n", p - haystack);
        }
        else{
            printf("没有找到");
        }
    
        system("pause");
    }
    

    输出结果:

    索引位置:10
    

    strset() 把字符串s中的所有字符都设置成字符c

    void main(void){
        char str[] = "Knowledge changes the world !";
        _strset(str,'w');
        printf("%s\n",str);
        system("pause");
    }
    

    输出结果:

    wwwwwwwwwwwwwwwwwwwwwwwwwwwww
    

    strrev() 把字符串s的所有字符的顺序颠倒过来

    void main(void){
        char str[] = "Knowledge  change the world!";
        _strrev(str);
        printf("%s\n", str);
        system("pause");
    }
    
    

    输出结果:

    !dlrow eht egnahc  egdelwonK
    

    atoi() 字符串转为int类型,atol():将字符串转换为长整型值

    void main(void){
        char* str = "a78";
        int r = atoi(str);  
        printf("%d\n", r);
    
        system("pause");
    }
    

    输出结果:

    0
    

    **strupr() **转换为大写

    void main(void){
        char str[] = "CHINA motherland!";
        _strupr(str);
        printf("%s\n",str);
        system("pause");
    }
    
    

    输出结果:

    CHINA MOTHERLAND!
    

    转换为小写

    void mystrlwr(char str[],int len){
        int i = 0;
        for (; i < len; i++){
            //A-Z 字母 a-Z
            if (str[i] >= 'A' && str[i] <= 'Z'){
                str[i] = str[i]-'A' + 'a';
            }
        }   
    
    }
    
    void main(void){
        char str[] = "CHINA motherland!";
        mystrlwr(str,strlen(str));
        printf("%s\n", str);
        system("pause");
    }
    

    删除字符串中指定的字符

    void delchar(char *str, char del){
        char *p = str;
        while (*str != '\0') {
            if (*str != del) {
                *p++ = *str;
            }
            str++;
        }
        *p = '\0';
    }
    int main()
    {
        char str[] = "vencent ppqq";
    
        delchar(str,'t');
        printf("%s\n", str);
        
        system("pause");
    }
    

    输出结果:

    vencen ppqq
    

    memcpy() ,由src所指内存区域复制count个字节到dest所指内存区域.

    void main(void){
        char src[] = "C,C++,Java";
        char dest[20] = {0};
    
        //字节
        memcpy(dest,src,5);
        
        printf("%s\n",dest);
        system("pause");
    }
    

    输出结果:

    C,C++
    

    memchr() 从buf所指内存区域的前count个字节查找字符ch。

    void main(void){
        char src[] = "C,C++,Java";
        char ch = 'C';
    
        //字节 (分段截取)
        char* p = memchr(src+3, ch, 5);
        if (p){
            printf("索引:%d\n", p - src);
        }
        else{
            printf("找不到\n");
        }
    
        
        system("pause");
    }
    
    

    输出结果:

    找不到
    

    memmove() 由src所指内存区域复制count个字节到dest所指内存区域。

    void main(){
        char s[] = "Michael Jackson!";
        //截取的效果 
        memmove(s, s + 8, strlen(s) - 8 - 1);
        s[strlen(s) - 8] = 0;
        printf("%s\n", s);
        getchar();
    }
    

    输出结果:

    Jackson
    
    

    相关文章

      网友评论

          本文标题:C语言 字符串

          本文链接:https://www.haomeiwen.com/subject/qiuydftx.html