字符串的理解及代码实现


字符串

字符串是位于双引号中的字符序列

在内存中以"\0"结束,所占字节比实际多一个


1.可以把一个字符常量赋给一个字符变量,但不能把字符串常量赋给字符变量

2.C语言中没有字符串变量,可以用字符数组来存放字符串


字符数组

格式

char 数组名[常量表达式]

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


注意:定义字符数组时,应确保数组长度比字符串长度至少多1


char ch[] = {'a','b','c','\0'};


char ch2[]= {"abc"};


字符串初始化和引用


//定义的同时进行初始化

1)char c[10]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'}; 定义的同时进行初始化


2)char c4[10] = {"adc"}  //定义了一个字符串数组c4 长度是10,初始化4个字符


3)char c5[5]="ab";       //未被使用的元素均被自动初始化为0(ASCII)

  char c6[]="afdsafas";


//先定义再初始化

char c7[3];

c7[0] = 'a';

c7[1] = 'b';

c7[2] = 'c';


使用string函数初始化字符串

strcpy(c7,"xxx");    //  xxx复制到c7代替c7原本的内容   但是要注意"xxx"的长度比c7的长度短


字符数组的引用

以字符串的形式输入和输出


使用的格式字符串为“%s”,表示输入、输出的是一个字符串。


%s 从给定的地址开始,输出字符直到遇到\0结束



注意在本例的printf函数中使用的%s,输出表列中给出 数组名 则可。

不能写为:printf("% s",c[]);


对一个字符数组,如果不作初始化赋值,则必须说明数组长度。



字符串结束符

1)字符数组初始化时没有使用 '\0'


先定义的变量存放在内存高地址,后面定义变量放在内存低地址


用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'


char ch[] = {'a','b','c','\0'};


char ch2[]= {"abc"};


关于字符串长度,如果在定义的没有规定字符串数组长度,则看元素个数,若规定了,则数组长度则是字符串长度.


字符串长度计算方法

“\0为字符串结束条件进行统计

1)不知道数组长度的时候,计算字符串的长度



2)已知数组长度,但是不知道数组中实际存放了多少个字符 while实现

strlen();

while(ch[i-1] != '\0')


sizeof计算字符串长度-->char ch[] = "abab/0bbc"以内的所有字符长度  9


注意初始化定义的字符串数组的长度  char[10] = "abc"     10



strlen计算字符串长度-->  \0前的所有字符长度   char[10] = "abc"   3

不包含 \0



转义字符\ 后面默认转义八进制数, 如果后面跟的不是八进制数,不会转义



字符数组和普通数组区别

实际上,字符数组和普通数组一样,没有本质区别。 int a[10],char ch[10]


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


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


3)字符数组 ,初始化 char str[]="aab";


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


数组名永远是一个指针,指向第一个元素的地址,即数组首地址。



字符串函数

#include


1、字符串输出函数 puts 格式: puts(字符数组名) 功能:把字符数组中的字符串输出到显示器。

会自动换行


2、字符串输入函数 gets 格式: gets (字符数组名) 功能:从标准输入设备键盘上输入一个字符串。

不以空格为字,而以回车作为输入结束


3、字符串连接函数 strcat 格式: strcat(字符数组名1,字符数组名2)

功能:把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志 “\0。本函数返回值是字符数组1的首地址。


4、字符串拷贝函数strcpy

格式: strcpy(字符数组名1,字符数组名2) 功能:把字符数组2中的字符串拷贝到字符数组1中。

要求字符数组1应有足够的长度


5、字符串比较函数strcmp

格式: strcmp(字符数组名1,字符数组名2) 功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。


字符串1=字符串2,返回值=0; 字符串1>字符串2,返回值>0; 字符串1<</span>字符串2,返回值<</span>0


本函数也可用于比较两个字符串常量,或比较数组和字符串常量。


6、测字符串长度函数strlen 格式: strlen(字符数组名)

功能:测字符串的实际长度(不含字符串结束标志‘\0’)并作为函数返回值。


字符串特点:

#include

#include

int main(){

    

   

    

    

   

    

    char s5[]="abc";

    int a=strlen(s5);

    int b=sizeof(s5);

    char s6[]="你好he\0llo";//中文字符==3个英文字符.

    int c=strlen(s6);

    int d=sizeof(s6);

    

    //printf("a=%d,b=%d\n",a,b);

    printf("c=%d,d=%d\n",c,d);

    

    return 0;

    

 

}


字符串练习:

 

#include

#include


int isHasChar(char arr[],char c);


int main(){

    char arr[]="abc";

    

    //printf("%c\n",arr[0]);

    

   

    

    char strs[3][10]={"hahah","haha","heima"};

    

    //等效于:char strs[3][10]={{'h','a','h','a','h'},...};

    

   

    

    

   

    

    

//    for (int i=0; i<3; i++) {

//        printf("%s\n",strs[i]);

//    }

//    

    

    

   

    

    

    char s6[]="hello";

    int d=isHasChar(s6,'l');

    printf("%d\n",d);

    

    return 0;

}


 


 

int isHasChar(char arr[],char c){

    

    int i=0;

    //'\0'.对应的int=0;

    while (arr[i++]!='\0') {

       if(arr[i]==c){

           return 1;

        }

       

    }

    

    return 0;

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值