1. 字符的定义方式及输出
#include<stdio.h>
int main()
{
char str1[5] = {'a','b','c','d','e'};
for (int i = 0;i < sizeof(str1) / sizeof(str1[0]);i++)
printf("%c", str1[i]);
putchar('\n');
char str2[5] = {"abcde" };
for (int i = 0;i < sizeof(str2) / sizeof(str2[0]);i++)
printf("%c", str2[i]);
putchar('\n');
char str3[] = { "abcde" };
for (int i = 0;i < sizeof(str3) / sizeof(str3[0]);i++)
printf("%c", str3[i]);
putchar('\n');
char* pstr = "hello world";
printf("%s\n",pstr);
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210404211911955.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dhdG9Xb25n,size_16,color_FFFFFF,t_70)
2. 字符串在内存中的存储方式
#include<stdio.h>
int main()
{
int a[3] = { 1,2.3 };
printf("整型数组的大小:%d\n",sizeof(a));
printf("整型数组元素的大小:%d\n", sizeof(a[0]));
printf("整型数组类型的大小:%d\n", sizeof(int));
printf("整型数组元素个数:%d\n", sizeof(a) / sizeof(a[0]));
char str[] = "abc";
printf("字符数组的大小:%d\n", sizeof(str));
printf("字符数组元素的大小:%d\n", sizeof(str[0]));
printf("字符数组类型的大小:%d\n", sizeof(char));
printf("字符数组元素个数:%d\n", sizeof(str) / sizeof(str[0]));
str[3] = a;
printf("该元素的大小:%d\n", str[3]);
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210404213142647.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dhdG9Xb25n,size_16,color_FFFFFF,t_70)
3.sizeof和strlen在字符串计算中的区别
#include<stdio.h>
int main()
{
char str[128] = "abc";
printf("该字符数组元素个数:%d\n", sizeof(str) / sizeof(str[0]));
printf("有效元素个数:%d\n", strlen(str));
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210404213601775.png)
4.字符串操作常用函数
API(Application Programming Interface,应用程序接口)(函数接口)
几种常用api:
1.输出字符串:puts(); printf("%s",p);
2.获取字符串:gets scanf("%s",p);
3.计算长度:strlen
4.初始化:memset
5.拷贝:strcpy strncpy
6.拼接:strcat
7.比较:strcmp
8.查找:strchr
9.字符串分割:strstr strtok
10.转为小写的函数:strlwr
11.转为大写的函数:strupr
![**加粗样式**](https://img-blog.csdnimg.cn/20210409171154220.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dhdG9Xb25n,size_16,color_FFFFFF,t_70)
#include<stdio.h>
int main()
{
char* pstr;
pstr = (char*)malloc(128);
if (pstr == NULL)
printf("申请内存失败");
memset(pstr,'\0',128);
printf("请输入字符串:");
gets(pstr);
puts(pstr);
}
5.字符串操作常用函数二
#include<stdio.h>
#include<string.h>
int main()
{
char* strdest;
strdest = (char*)malloc(128);
memset(strdest,'0',128);
char* strsrc = "hello world";
strcpy(strdest,strsrc);
puts(strdest);
char* add = "!!!";
strcat(strdest,add);
char* str1 = "90";
char* str2 = "100";
int ret;
ret= strcmp(str1,str2);
switch (ret) {
case 0:printf("str1=str2");break;
case 1:printf("str1>str2");break;
case -1:printf("str1<str2");break;
}
}
6.字符串操作常用函数三
#include<stdio.h>
#include<string.h>
int main()
{
char* str = "shuaige";
char c = 'i';
char* p = NULL;
p=strchr(str,c);
if (p == NULL)
printf("没有搜索到你要的位置");
else {
printf("搜索位置为:");
puts(p);
}
char* substr = "ai";
p = strstr(str,substr);
if (p == NULL)
printf("没有搜索到你要的位置");
else {
printf("搜索位置为:");
puts(p);
}
}
7.自己实现字符串操作api
#include<stdio.h>
#include<string.h>
void myputs(const char*p) {
while (*p!='0')
{
putchar(*p++);
}
}
int main()
{
const char* p = "hello world";
myputs(p);
}
8.自己实现字符串操作api二
#include<stdio.h>
#include<string.h>
void mycopy(char*dest,const char*src)
{
if (dest == NULL || src == NULL)
{
return NULL;
}
while (*src != '0')
{
*dest = *src;
dest++;
src++;
}
return dest;
}
int main()
{
char* dest = {'0'};
char* src = "qwer";
mycopy(dest,src);
puts(dest);
}