黑马程序员技术交流社区

标题: C语言学习笔记之字符串的使用 [打印本页]

作者: chunhuayun    时间: 2015-9-25 18:12
标题: C语言学习笔记之字符串的使用
09-04字符串 的基本概念
1.概念 字符串是位于双引号中的字符序列。在内存中以'\0'结束,所以占字节比实际多一个。

2.注意:
        a.可以把一个【字符常量】赋值给一个【字符变量】,但是不能把【字符串常量】赋值给【字符变量】。
        b.C语言中没有【字符串变量】,可以用字符数组来存放字符串。

3.字符数组的定义
        3.1 形式与前面介绍的数值数组相同 : char 数组名[常量表达式]

4.字符数组的输入输出
        使用格式字符串“%s”,标书输入输出的是一个字符串。从指定的位置开始,输出,直到遇到了‘\0’结束。

        例如:
  1.                 char str[] = "Hello,dark horse";
  2.                 printf("str = %s", str);
复制代码

        打印结果:
                str = Hello,dark horse

        注意:如果
  1. str[] = "Hello \0,dark horse";
  2.                 printf("str = %s", str)
复制代码

        打印结果:
                str = Hello
                因为从开始位置直到遇到了'\0'时结束输出

5.注意事项
        a.如果以%s格式进行输入的字符串有空格,则空格之后的字符无法被保存。

6.字符串结束符的使用
  1. char ch[] = {'a','b','\0'}; // 加'\0'后就可以当做一个字符串使用
复制代码

        a.字符数组在初始化时没有在最后加上‘\0’,那么输出时会有预料不到的后果。

7.字符串长度的计算方法
        7.1 用sizeof
  1. //此处字符串的长度 恰好等于数组在内存中占用的字节数
  2.     char ch[] = "amos";
  3.     //次数字符串长度不等于数组在内存中占用的字节数
  4.     char arr[] = "am\0os";
  5.    
  6.     printf("ch len = %ld\n",sizeof(ch));
  7.     printf("arr len = %ld\n",sizeof(arr));
复制代码


    7.2专门给计算字符串长度的方法
            a.使用字符串函数 strlen(arr)
            b。以‘\0’作为条件,进行判断,遇到'\0'就结束,即‘\0’之前就是字符串长度
                    例如
  1.                     char arr[] = "abcd";
  2.                     //在不知字符数组长度的情况下,求字符串长度
  3.                     int i = 1;
  4.                     while(arr[i - 1] !='\0') i++;
  5.                     printf("length = %d", i);
复制代码


8.字符串处理函数
        用于输入输出的字符串函数,在使用前应包含头文件“stdio.h”,使用其他字符串函数则因包含头文件“string.h”
       
        8.1 字符串 输出函数 puts
                a.puts可以自动换行
                b.也可以不是数组的首地址,可以是元素地址
                c.必须是字符数组
  1.    char str[] = "Hello Amos!!";
  2.             puts(str);
  3.             printf("%s",str);
复制代码


            打印结果:
                    Hello Amos!!
                        Hello Amos!!
        8.2 输入函数 gets,用来接受一个字符串
                a.使用gets会给一个不安全的警告,如果长度是100,但是输入了120个字符,不会警告,存在越界问题
                b.可以接受空格
                c.puts不可以格式化输出
  1.                 char str[100];
  2.                 scanf("%s", str);//缺陷是输入字符串中不能有空格
复制代码


        8.3 连接函数 strcat 需要包含string.h头文件
                strcat(A, B); 把B接到A得后面

        例如:
  1.             char str[] = "Amos!!";
  2.             char arr[20] = "你好 ";//字符数组arry一定要指定长度,而且要足够容纳str,否则运行时会出错
  3.             strcat(arr, str);
  4.             printf("%s",arr);
复制代码

        打印结果:
        你好 Amos!!

        8.4 字符串拷贝函数 strcpy
        格式: strcpy(oldStr, newStr),把newStr拷贝到oldStr中,newStr会覆盖掉oldStr中的内容

        例如:
  1. char str[] = "Hello Amos!!";
  2.             char arr[20] = "你好 Amos";
  3.             strcpy(arr, str);
  4.             printf("%s",arr);
复制代码

        打印结果:
                Hello Amos!!

        8.5 比较两个字符串的大小 strcmp
        规则:比较字符的ASCII码值或字母的字典序
        格式:strcmp(str1, str2)       
        比较过程:逐个取两个字符串的字符对应位想比较,从第一位不同的位开始,就能确定那个字符串大小
        返回值:整型, > 0  str1 > str2
                                < 0  str1 < str2
                                = 0  str1 = str2
        例如:
  1.             char str[] = "Hello Amos!!";
  2.             char arr[] = "Hello Amos!!";
  3.             int result = strcmp(arr, str);
  4.             printf("result = %d", result);
复制代码


        打印结果:result = 0
        例如:
  1.             char str[] = "Hello Amos!";
  2.             char arr[] = "Hello Amos!!";
  3.             int result = strcmp(arr, str);
  4.             printf("result = %d", result);
复制代码


        打印结果:result = 33

        例如:
  1.             char str[] = "Hello Amos!!";
  2.             char arr[] = "Hello Amos!";
  3.             int result = strcmp(arr, str);
  4.             printf("result = %d", result);
复制代码


        打印结果:result = -33       

9. 计算字符串长度函数 strlen
        strlen不含'\0'
        例如:
  1.             char str[] = "Hello\0 Amos!";
  2.             printf("result = %ld", strlen(str));
复制代码

    打印结果:
    result = 5




作者: lionheartism    时间: 2015-9-25 18:20
很详细啊~赞一个




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2