• c语言之字符串数组


    一、字符串与字符串数组

      1、字符数组的定义

        char array[100];

      2、字符数组初始化

        char array[100] = {'a','b','c'};  //array[0] = 'a'    array[10] = 0

        char aray[100] = "abcdef"; 

        char aray[100] = {0};

        char aray[] = "qwertyuiop"; //未指定长度时,根据字符串长度自动填写。

      3、sizeof()方法 查看数组的字节长度 

        例如:

    #include<stdio.h>
    int main(void)
    {
        char a[] = "asdfg";
        int len = sizeof(a);
        printf("数组a的长度为:%d",len);  //数组a的长度为:6 --> "asdfg"(实际上字符串以数字0结尾)
        return 0;
    }

      4、字符数组的使用

        例一:排序  

    #include<stdio.h> 
    
    int main(void)
    {
        char a[] = "befacd";
        char i,j,temp;
        for(i=0;i<sizeof(a)-1;i++)
        {
            for(j=1;j<sizeof(a)-1-i;j++)
            {
                if(a[j-1]>a[j])
                {
                    temp = a[j-1];
                    a[j-1] = a[j];
                    a[j] = temp;
                }
            }
         } 
        printf("%s
    ",a); // 输出: abcdef 
    
        return 0;
    }
    View Code

         例二:字符串倒置(首尾倒置)

    #include<stdio.h> 
    int main(void)
    {
        char str[] = "hello world";
        int i = 0;
        while(str[i++]) ;
        int len = i-1;  //字符串有效长度 
        int min = 0;
        int max = len-1; // 下标最大值 
        while(min<max) 
        {
            char temp = str[min];
            str[min] = str[max];
            str[max] = temp;
            min++;
            max--;
        }
        printf("%s
    ",str); // 输出: dlrow olleh 
        return 0;
    }
    View Code

        例三:汉字首尾逆置

    #include<stdio.h> 
    int main(void)
    {
        char b[] = "你好!明天"; //每个中文字符在gbk编码中占两个字节
        int i = 0;
        while(b[i++]) ; //不断遍历字符串,直至遇到末尾的0,退出
        i--;     // 字符串的有效长度
        int min = 0;
        int max = i-1;
        while(min<max)
        {
            char tmp;
            tmp = b[min];     //调换第一个字节和倒数第二个字符
            b[min] = b[max-1];
            b[max-1] = tmp;
            
            tmp = b[min+1];   //调换第二个字节和最后一个字符
            b[min+1] = b[max];
            b[max] = tmp;
            
            min += 2;
            max -= 2;
        }
        printf("倒置后的字符串:%s
    ",b);   // 倒置后的字符串:天明!好你
         
        return 0;
    }

        例四:混合统计汉字和ASCII字符串字符  

    #include<stdio.h>
    int main(void)
    {
        char str[] = "厉害了,MyCountry!";
        int len_e = 0;
        int len_c = 0;
        int sum = 0;
        int i,j;
        while(str[i])
        {
            if(str[i]<0)
            {
                len_c += 1;
                i += 2;
             } 
             else{
                 len_e += 1;
                 i += 1;
             }
        }
        sum = len_c+len_e;
        printf("中文字符:%d,英文字符:%d,所有字符总数:%d",len_c,len_e,sum); //中文字符:4,英文字符:10,所有字符总数:14 
        return 0;
    }

        例五:去除字符串右边的空格

    #include<stdio.h> 
    int main(void) 
    {
        char c[100] = "hello   ";
        int i = 0;
        int len,j;
        while(c[i++]) ;
        len = i--;
        for(j=len;j>0;j--)
        {
            if(c[j]!=' ')
            {
                c[j++]=0;
                break;
            }
        }
        printf("取掉末尾的空格后的字符串:%s
    ",c); //取掉末尾的空格后的字符串:hello
        return 0;
    }

        例六:去除字符串前面的空格

    #include<stdio.h>
    int main(void)
    {
        char s[100] = "    hello,boy";
        int count = 0;  //统计空格长度 
        int i;
        while(s[count++]==' ') //遍历空格 
        count--; //取得空格数量 
        i = count; //字符开始位置 
        while(s[i]) 
        {
            s[i-count] = s[i]; //第一个字符赋给第一个位置
            i++; 
         } 
        s[i-count] = 0; //字符串最后赋0
        printf("去除空格后的字符串:%s
    ",s);
         
        return 0;
        
    }
    View Code

       4、数组总结

        1、数组的本质就是一次定义多个类型相同的变量,同时一个数组中所有的元素在内存中都是顺序存放的。
        2、char s[100] ;s[0]-->s[99],切记没有s[100]这个元素。并且c语言编译器不会帮你检查下标是否有效。
        3、字符串一定是在内存中以0结尾的一个char数组。

        

        

  • 相关阅读:
    HDU 1434 幸福列车(优先队列)
    HDU 4287 Intelligent IME(字典树)
    HDU 1671 Phone List(字典树)
    HDU 1711 Number Sequence(KMP匹配数字串)
    HDU 1251 统计难题(字典树计算前缀数量)
    HDU 2087 剪花布条(KMP基础应用)
    HRBUST 1909 理工门外的树(双数组实现线段树功能)
    HDU 1166 敌兵布阵(线段树)
    HDU 1754 I Hate It(线段树基础应用)
    HDU 1260 Tickets(基础dp)
  • 原文地址:https://www.cnblogs.com/schut/p/8546239.html
Copyright © 2020-2023  润新知