• c语言学习之基础知识点介绍(十一):字符串的介绍、使用


    本节主要介绍c语言中的字符串的应用。

    一:字符串介绍

            因为c语言中没有像Java、C#那样的字符串类型,所以无法直接用字符串。需要借助数组来解决这个问题。

    /*
    定义:把多个字符连在一起就叫字符串。但是在c语言中要正确描述字符串,需要说成以''结尾的字符集合。
    
    用数组解决字符串问题:
            1、长度需要 +1。
            2、在末尾加一个''
    然后用%s输出。
    例如:
             char chs[4] = {'a','b','b',''};
              printf("%s 
    ",chs);
    
    语法:
             1、char 变量名[实际长度+1] =  {'a','b','b',''};
                   char str[4] = {'a','b','b',''};
             2、char 变量名[] =  {'a','b','b',''};
                   char str[] = {'a','b','b',''};
             3、char 变量名[实际长度+1] =  "字符串";
                   char str[4] = ”abc”;//记得不用加
             4、char 变量名[] =   "字符串";
                   char str[] = ”abc”;//记得不用加
    因为char只有一个字节,中文有3个字节,所以在保存中文的时候需要这样:
    char str[] = "哈哈哈哈哈":
    
    */

    二、字符串的输入和输出

    /*
    输出:用 %s。
    输入也是用 %s。
    注意:
           1、数组名是一个地址常量,如果用scanf进行输入,只需要写数组名,不需要写&。
           2、如果要输入,数组的长度一定要足够长,不然可能会出现未知错误(越界造成的)。
    
    例如:
    char str[] ;
    scanf(" %s ",str):
    printf("str = %s 
    ",str);
    */

    三、字符串的判断

    /*
    字符串的比较:
    例如:
      char str1[] = "abc";
      char str2[] = "abc";
      if(str1==str2){
         printf("相等");
      }else{
        printf("不等");
      }
    //永远输出: 不等
    所以,不能用  ==   来判断两个字符串是否相等,因为数组名是一个地址常量。
    
    正确的方法:
        1、需要导入#include <string.h>头文件
        2.、使用strcmp
    注意:使用strcmp,如果返回0,代表两个字符串相等。
    例如:
      char str1[] = "abc";
      char str2[] = "abc";
      int result = strcmp(str1,str2); //结果是0,
     // if(result == 0){ //两种都可
      if(!strcmp(str1,str2)){
         printf("相等");
      }else{
        printf("不等");
      }
    
    
    */            

    四、字符串的其他表示法

    /*
     1、数组表示法:
                 char str[] = "abc";
     2、常量:
               "abc";
     3、指针表示法:
               char *str = "abc";
    
    数组表示法和指针表示法的区别:
            1、数组表示法可以改变里面的值,指针表示法不可以改值。
            2、数组表示法可以接受用户输入的值,指针表示法不可以接收。
            3、数组表示法不可以用==来判断一个字符串和一个字符串常量是否相等,指针表示法可以用==,但是不推荐这样做,推荐用strcmp。
    例如:
            char *str = "abc";
            if(str == "abc"){
            
            }
    */

     五、c语言中字符串常用的函数

    /*
    输出:
             1、printf("%s 
    ",字符串变量);
             2、puts(字符串变量);
    区别:1、puts不需要格式化控制符,printf需要。
                2、puts只能输出字符串,printf其他类型都可以输出。
                3、puts自带换行,printf没有自带换行。
    
    输入:
             1、scanf(" %s ",字符串变量);
             2、gets(字符串变量);
    区别:1、gets只能输入字符串,scanf其他类型都可以输入。
                2、gets不需要格式化控制符,printf需要。
    puts和gets都在strdio.h中 ,需要导入(#include <strdio.h>)。
    
    其他函数:(都在string.h头文件中,导入#include <string.h>)
    1、strcmp
         语法:strcmp(字符串1,字符串2);比较两个字符串谁大谁小(比较的是ASCII码)。如果第一个字符串比第二个字符串大,返回一个正整数;反之,返回一个负整数。如果第一个字母不等,就直接返回结果,第一个相等,就继续比较第二个字母,如果不等,就直接返回结果,以此类推。
    例如:
    char str1[] = "abc";
    char str2[] = "zbc";
    printf("%d 
    ",strcmp(str1,str2)); //输出:-25,不等,只有输出0的时候才是相等。
     
    2、strcpy
           语法:strcpy(字符串数组,字符串2); 是把字符串2的内容拷贝到字符串数组中;如果原先的字符串数组中有值,会被覆盖。
    char str1[] = "abc";
    char str2[] = "哈哈哈";
    printf("%s 
    ",strcpy(str1,str2)); //输出:哈哈哈
    
    3、strcat
           语法:strcat(字符串数组,字符串2); 是把字符串2的内容追加到字符串数组后面。
    char str1[] = "abc";
    char str2[] = "哈哈哈";
    printf("%s 
    ",strcat(str1,str2)); //输出:abc哈哈哈
    
    4、strlen
           语法:strlen(字符串);计算字符串的实际长度(占用的字节数),不参与计算。
    
    
    介绍两种不常用的函数:
    putchar:输出字符,不带换行
    例如:putchar('a');
    
    getchar:输入字符,改函数是有返回值的,返回值就是你输入的字符。
    例如:
    printf("请输入一个字符:
    ");
    char chs = getchar();//输入a
    printf("chs = %c",chs);//输出:chs=a
    
    
    */

    六、一些注意事项

    /*
     '0' != 0;因为字符 0  对应的ascii码是48,0对应的ascii码是‘’。
      0 == ''
     
    指针表示法:
    char  *str = "abc";//指针自己不存字符串,而是指向常量区的某个字符串地址。
    数组表示法:
    char str[]="abc";
    
    区别:
              指针表示法不能接收用户的输入,不能被修改,而数组表示法都可以。
    
    在连接字符串的时候,需要注意:
            strcat(字符串1,字符串2);
    字符串1需要足够长的长度来保存拼接后的字符串。
    */
  • 相关阅读:
    Leetcode86.分隔链表
    Leetcode39.组合总和
    Leetcode31.下一个排列
    剑指Offer35.复杂链表复制
    剑指Offer14-I.剪绳子
    剑指Offer38.字符串的排序
    Leetcode29.两数相除
    232. Implement Queue using Stacks
    程序员跳槽指南
    226. Invert Binary Tree
  • 原文地址:https://www.cnblogs.com/bobo-pcb/p/4930679.html
Copyright © 2020-2023  润新知