1.什么是字符串?
将字符按照一定的顺序传起来
2.字符串的特点?
2.1存储的都是字符类型的数据(相同类型的数据)
2.2是一个有序的集合
2.3C语言中的字符串必须以\0结尾的
3.如何定义字符串?
3.1利用数组定义字符串
char str1={'l','n','j','\0'};
3.2利用双引号定义字符串
char str2="lnj";
4.注意点:
在定义的同时部分初始化,没有被初始化的元素会自动赋值为0
所以如果定义的数组长度比较长,那么可以自动转换为字符串
char str1[]={'l','n','j'};
以上不是一个字符串,因为不是'\0'结尾的
在定义的同时部分初始化,没有被初始化的元素会自动赋值为0
char str1[4]={'l','n','j'};
以上是一个字符串
而‘\0’的ASCII码值就是0,所以以下是字符串
字符串存储细节
1.字符串的存储细节
和数组一样
变量名称 | 元素索引 | 地址 | 内存 |
str1[3] | 0FFFF | \0 | |
str1[2] | 0FFFE | j | |
str1[1] | 0FFFD | n | |
str1 | str1[0] | 0FFFC | i |
输出字符串的方法:
第一种遍历数组
第二种索引:
第三种:
字符串长度计算
1.用于计算字符串的长度
直接使用strlen函数
下面是第二种
字符串拼接函数
strcat(str1,str2);
会将第二个参数拼接到第一个参数后面
注意点:必须保证第一个参数的容量足够,否则会拼接失败
#include <stdio.h>
#include <string.h>
void myStrcat(char str1[],char str2[]);
int main()
{
char str1[]={'l','n','j','\0'};
char str2[]={'k','k','\0'};
printf("str1:%s\n",str1);
myStrcat(str1,str2);
printf("str1:%s\n",str1);
return 0;
}
void myStrcat(char str1[],char str2[])
{
int index = 0;
while(str1[index] !='\0')
{
index++;
}
int i = 0;
while(str2[i] != 0)
{
str1[index]=str2[i];
index++;
i++;
}
}
字符串比较函数
用于字符串比较的函数
strcmp函数
会利用两个参数进行比较(比得是ASCII码的大小)
如果第一个参数大于第二个参数,就会返回1;
如果第一个参数小于第二个参数,就会返回-1;
如果第一个参数等于第二个参数,就会返回0;
#include <stdio.h>
#include <string.h>
void myStrcat(char str1[],char str2[]);
int main()
{
char str1[]={'l','n','j','\0'};
char str2[]={'k','k','\0'};
int res = strcmp(str1,str2);
printf("res = %i\n",res);
return 0;
}
#include <stdio.h>
#include <string.h>
int myStrcmp(char str1[],char str2[]);
int main()
{
char str1[]={'l','n','j','\0'};
char str2[]={'k','k','\0'};
int res = myStrcmp(str1,str2);
printf("res = %i\n",res);
return 0;
}
int myStrcmp(char str1[],char str2[])
{
int index = 0;
while(str1[index]!='\0'||str2[index]!='\0')
{
if(str1[index]>str2[index])
{
return 1;
}
else if(str1[index]<str2[index])
{
return -1;
}
index++;
}
return 0;
}