1、字符串的本质
#include <stdio.h>
int main()
{
/*
* 1.字符串?
* 将字符串到一起就是字符串, 有序 / 同类型的 --> 数组
* 其实C语言中的字符串就是一个特殊的数组而已
*
* 2.特殊在什么地方?
* 如果你想用数组来表示字符串, 那么数组必须是char类型, 而且的最后一个元素必须是\0
*
* 3.由于字符串比较特殊
* 所以在C语言中除了可以用字符数组来表示字符串以外, 还可以用""来表示字符串
*
* 什么是羊肉串? 什么是牛肉串?
* 羊肉串和牛肉串的特点:
* 只要将肉串到棍子上之后, 肉就是有序的, 并且棍子上串的都是肉
* 提炼: 有序 / 同类型的 --> 数组
*/
// 以下就是一个字符串
char str1[] = {'m', 's', 'h', '\0'};
// 以下是一个字符数组, 不是字符串
char str2[] = {'m', 's', 'h'};
// 以下是字符串
// 如果在定义的同时部分初始化, 那么没有被初始化的元素会自动赋值为0
// \0的ASCII码就是0
char str3[10] = {'m', 's', 'h'};
// 以下是字符串
char str4[] = "msh"; // 底层就是 {'m', 's', 'h', '\0'};
// %i -> int, %c -> char, %f -> float, %s -> string
// %s会从数组的第0个元素开始打印, 知道遇到\0为止
printf("str = %s\n", str2);
// printf("%i\n", '\0');
return 0;
}
#include <stdio.h>
int main()
{
// 以下就是一个字符串
char str1[] = {'z', 'q', 'x', '\0'};
// 以下是一个字符数组, 不是字符串
char str2[] = {'w', 'b', 'd'};
// %s会从数组的第0个元素开始打印, 直到遇到\0为止
// printf("str1 = %s\n", str1);
// printf("str2 = %s\n", str2);
// int index = 0;
// while(str2[index] != '\0'){
// printf("%c", str2[index]);
// index++;
// }
return 0;
}
2、字符串的输出、输入
#include <stdio.h>
#include <string.h>
int main()
{
/*
* 1.输出
* 2.输入
* 3.计算字符串长度
*/
// char str[] = "msh";
// printf + %s输出不会自动换行, 必须手动添加\n
// printf + %s可以添加自定义内容
// printf("str = %s", str);
// puts输出会自动换行
// puts输出不能添加自定义内容
// puts(str);
// printf("参考的内容");
// char str[10];
// scanf + %s 接收用户输入的数据
// scanf + %s 接收字符串, 输入的数据中不能有空格/TAB/回车, 系统会将如上三个符号当做结束符号
// scanf("%s", &str);
// gets 接收字符串, 可以输入空格/TAB
// gets(str);
// printf("str = %s", str);
char str[] = "msh"; // {'m', 's', 'h', '\0'}
// int len = sizeof(str) / sizeof(str[0]); // 4
//// printf("len = %i\n", len);
// for(int i = 0; i < len; i++){
// printf("%c\n", str[i]);
// }
// printf("msh.com\n");
// int length = strlen(str);
// printf("length = %i\n", length);
// : 自己写代码实现strlen函数
return 0;
}
3、常用方法
#include <stdio.h>
#include <string.h>
int main()
{
// char str1[6] = "msh";
// char str2[6] = "msh.com";
// 字符串拼接
/*
// 传入两个数组, 会将后面一个数组拼接到前面一个数组的后面
// 注意点: 前面一个数组必须足够长, 否则在企业开发中会引发一些未知的BUG
// strcat(dest, src)
// strcat(str1, str2);
// printf("str1 = %s\n", str1);
// printf("str2 = %s\n", str2);
// 会将src中的count个字符拼接到dest后面
// strncat(dest, src, count)
int size = sizeof(str1)/sizeof(str1[0]); // 字符数组可以存储多少个元素
int len = strlen(str1); // 除了\0以外存储了多少个元素
int count = size - len - 1; // -1给\0留位置
// printf("size = %i\n", size);
// printf("len = %i\n", len);
// printf("count = %i\n", count);
strncat(str1, str2, count);
*/
// : 自己写代码实现strcat函数
// 字符串拷贝
/*
// 会用将src中的字符拷贝到dest中, 覆盖掉dest中原有的内容
// 注意点: 前面一个数组必须足够长, 否则在企业开发中会引发一些未知的BUG
// strcpy(dest, src);
// strcpy(str1, str2);
// printf("str1 = %s\n", str1);
// printf("str2 = %s\n", str2);
*/
// : 自己写代码实现strcpy函数
// 字符串比较
// 会依次从第0个索引开始, 取出str1和str2中每个元素进行比较
// 如果str1当前的元素大于str2当前的元素, 那么返回一个正数
// 如果str1当前的元素小于str2当前的元素, 那么返回一个负数
// 如果str1当前的元素等于str2当前的元素, 那么返回0
// strcmp(str1, str2);
char str1[6] = "124";
char str2[6] = "133";
int res = strcmp(str1, str2);
printf("res = %i\n", res);
// : 自己写代码实现strcmp函数
return 0;
}
4、字符串数组
#include <stdio.h>
int main()
{
/*
* 字符串数组
* 字符串就是一个数组, 所以保存字符串数组就是二维数组
*/
char str1[] = {'a','b','c','\0'};
char str2[] = {'w','b','d','\0'};
char str3[] = {'d','e','f','\0'};
// char str[] = {
// {'a','b','c','\0'},
// {'w','b','d','\0'},
// {'d','e','f','\0'}
// };
char str[] = {"abc", "lnj", "def"};
return 0;
}
网友评论