zoukankan      html  css  js  c++  java
  • 黑马程序员——字符串的概念,定义,以及注意事项

    黑马程序员——字符串的概念,定义,以及注意事项

     

    **一、   概念:**

    字符串是位于双引号中的字符序列,在内存中以“\0”结束。所占字节比实际多一个。

             例:字符串”HELLO”在内存的储存方式

    H

    E

    L

    L

    O

    \0

    注意事项

    1、一个字符常量可以赋值给一个字符变量,字符串常量不能赋值给字符变量。  

    例:char ch=’a’正确    char ch=”hello”错

    2、在C里边用字符数组来存储字符串  

     例:char ch[10]=”ac”

    **二、定义:**

    1、一维char 数组名[常量表达式]  

    例:char ch[10]

       二维 char 数组名[常量表达式1] [常量表达式2]  

    例:char ch[10][5]

    注意事项:

    定义字符数组时,应该确保数组长度比字符串长度至少多1个

    **三、  字符串的储存**

    1、       可以是 char ch[4]={”abc”};也可以是 char ch[4]=”abc”;

    2、       字符串在内存中存储的时候是以单个字符存储的

    #include <stdio.h>

    int main(int argc, const char * argv[])

    {

           char ch[]=”hello”;

           for(int i=0;i<sizeof(ch);i++){

           printf(“%c\t”,ch[i]);

    }

    return 0;

    }

    打印的结果是:h e l l o 

    **四、  字符串的输出、输入**

    1、%c

       当我们想要看到的是一个字符串,但是每次打印的却是一个字符

     1 #include <stdio.h>
     2 
     3 int main(int argc, const char * argv[])
     4 
     5 {
     6 
     7        char ch[10]=”itcast”;
     8 
     9        for(int i=0;i<10;i++){
    10 
    11        printf(“%c\t”,ch[i]);
    12 
    13 }
    14 
    15 return 0;
    16 
    17 }

    打印结果:i t c a s t    Program……..

    2、%s

       而%s输出的就是一个字符串。从给定的地址开始,一直输出字符,知道遇到\0停止

     1 #include <stdio.h>
     2 
     3 int main(int argc, const char * argv[])
     4 
     5 {
     6 
     7        char ch[10]=”itcast”;
     8 
     9               printf(“%s\n”,ch);
    10 
    11 printf(“%s\n”,&ch[0]);
    12 
    13 return 0;
    14 
    15 }

    打印结果:itcast

              itcast

    Program……..

    输入

    %s接收键盘上输入的一个字符串

    从键盘上接收一个字符串,保存在以ch为首四肢字符数组中

    #include <stdio.h>

    int main(int argc, const char * argv[])

    {

           char ch[10];

           scanf(“%s”,ch);

                  printf(“-------%s\n”,ch);

    return 0;

    }

    打印结果:---------itcast

    Program….

    注意:

    1、如果以%s格式进行输入的话,注意空格问题。

    如果输入的字符串有空格,则空格之后的字符将无法被接收保存(以%s格式输入,scanf遇到空格,就结束)

    2、输入字符串长度要小于数组长度

    五、计算字符串的长度

    #include <stdio.h>

    int main(int argc, const char * argv[])

    {

    //字符串的长度

    //字符串的长度恰好等于了数组在内存中占用的字节数

           char ch[]=”abc”;

                  printf(“%ld\n”,sizeof(ch));

    char ch1[]=”abc\0abc”;

    printf(“%ld\n”,sizeof(ch1));

    return 0;

    }

    打印结果:4

              8

    Program……..

    //有专门计算字符串的长度的方法

    //1、使用字符串函数:strlen(ch)

    //2、以\0作为条件,进行判断。遇到\0就结束

           \0之前的就是字符长度

                  不知道数组长度的群殴你工况下,计算字符串长度

                  //char ch[]=”abc”

    Int i=0;

    while(ch[i]!=’\0’) i++;

    printf(“%d\n”,i);

    打印:3

     

    五、  字符数组与普通数组区别

    1)        字符数组的每个元素都是char类型,整形数组的每个元素都是int类型

    2)        scanf()和printf()函数有一种格式化字符串%s可以用来整体输入输出数组,但是没有特定的格式int数组整体数组输出。

    3)        字符数组,初始化char ch[]=”ab”;

    整形数组,初始化 不能去掉大括号

    6、字符串函数的使用

          使用puts和gets,必须包含头文件stdio.h

    puts()     输出一个字符串

     

     1 #include<stdio.h>
     2 
     3 int main(){
     4 
     5        char ch[]="abc";
     6 
     7        printf("%s\n",ch);
     8 
     9        //puts(字符数组地址);
    10 
    11        //1)puts函数可以自动换行
    12 
    13        //2)字符数组:也可以不是数组的首地址,可以是元素的地址:put(&ch[1])
    14 
    15        //使用gets可以接收空格
    16 
    17        puts(&ch[1]);
    18 
    19 }

            gets()     输入一个字符串

    #include<stdio.h>

    int main(){

           char ch1[100];

           scanf("%s",ch1);//缺陷:输入字符串的时候不能有空格

           /*警告:不安全,数组长度为10的时候,但是如果输入12个字符的时候,不会报错,不能检测越界问题

           使用gets可以接收空格*/

           gets(ch1);

           puts(ch1);

    }

          需要包含string.h的头文件

     strcat()    连接一个字符串,把两个字符串连接成一个字符串

               strcat(A,B)把字符串B连接到A的后边去

     1 #include<stdio.h>
     2 
     3 #include<string.h>
     4 
     5 int main(){
     6 
     7        //strcst使用的时候必须引入头文件string.h
     8 
     9        //1)格式:strcat(ch,ch1);
    10 
    11        //2)ch的长度要足够长,要能保存下ch+ch1的长度
    12 
    13        //3)ch1把ch的最后一个字符\0给覆盖了
    14 
    15        char ch[100]="welcome to ";
    16 
    17        char ch1[]="you!";
    18 
    19        strcat(ch,ch1);
    20 
    21        puts(ch);
    22 
    23 }

    结果:welcome to you

           strcpy     字符串拷贝函数

                     strcpy(ch,ch1);

                     把ch1拷贝到ch中,ch1会覆盖掉ch中的内容

          strcmp      字符串的比较函数

    strcmp(ch,ch1);

                     比较两个字符串的大小(比较字符的Ascii码值,逐个比较)

    strcmp(ch,ch1);  有返回值  >0 ch>ch1   <0 ch<ch1    = =0 ch= =ch1

          strlen       字符串的长度的计算

                     strlen(ch); 计算的长度不含\0  

     

  • 相关阅读:
    2018.12.17-dtoj-1174-出现或反转后出现在每个字符串中的最长子串
    2018.12.17-dtoj-1173-每个字符串至少出现两次且不重叠的最长子串
    2018.12.17-dtoj-1171-长度不小于k的公共子串的个数
    2018.12.17-dtoj-1170-最长公共子串
    2018.12.17-dtoj-1168-连续重复子串
    欧拉四面体公式
    超级密码 hdu1226 bfs
    糖果大战 hdu1204
    Find The Multiple (poj1426 一个好的做法)
    Life Forms (poj3294 后缀数组求 不小于k个字符串中的最长子串)
  • 原文地址:https://www.cnblogs.com/gaozp/p/4818234.html
Copyright © 2011-2022 走看看