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

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

 

**一、   概念:**

字符串是位于双引号中的字符序列,在内存中以“\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  

 

原文地址:https://www.cnblogs.com/gaozp/p/4818234.html