#include "stdio.h"
#include <string>
int main()
{
char s1[4] = "abc";
//这是对第一个函数进行探究的printf("原来字符串s1的长度是%d\n", sizeof(s1));
char s2[4] = "abc";
printf("原来的str1为%s\n", s1);
printf("原来的str2为%s\n", s2);
// int ch = 0;
char s3[5]={ 0 };
//探究strcpy函数的使用
/*strcpy_s(s1, s2);
printf("%s", s1);
printf("在交换以后字符串s1的长度是%d\n", sizeof(s1));
/*
在使用strcpy 时形参列表中是两个字符数组的名字而且后面的数组的大小一定是小于或者等于第一个数组的大小,否则在写入时将报错
就相当于把数组2直接替换掉了数组1
但是字符串s1的长度是不变的,,就是一个俄罗斯套娃的感觉
*/
//多行注释的使用/* 有几行语句/* 又有几行语句 */
//这才是对的,也就是说多行注释是不能进行嵌套使用的,,也就是程序只认识最外面的那组多行注释符。写的一一对应反而会报错,,,提示应该在。
//系统在读取到/*以后,,自动向后进行检索,,去找离他最近的那个*/
//探究strcat函数的使用
// strcat_s(s1, s2);//在连接字符串的函数,是不需要返回值的,相当于一条语句而已
//printf("检验是不是直接将s2接到%s\n", s1);//是的
/*
在使用strcat函数时的相关说明
1: 在形参列表里面放的是,,待操作字符串的数组名而已,,因为此时在调用这个自带的函数,,,所以是采用实际参数的形式
2: 注意在strcat(s1,s2)时注意用来盛放字符串s1的数组的长度至少是a+b-1;a.b分别是s1于s2对应的字符数组的大小
3: 实际上也就是将字符数组s2直接接到了字符数组s1的屁股后面
4: 这个函数是不需要返回值的。。。只是一个语句而已,,,他是可以没有输出的
5: 在输出一个字符串时,,printf ("%s",字符串所对应的字符数组的数组名);
6: 直接连在s1的屁股后面。。。形参只是一个地址而已
*/
// 探究strlen函数的使用
//int a ,b=0;
//char a;
//bool a;
//float a;
//long a;
//double a;
//a=strlen(s1);
//printf("%d", (int)a);
/*
在使用strlen函数时的相关说明
1: 形参列表里面放的是,,,待操作字符串的数组名而已,,,,因为在调用这个函数,,实参就是数组名,,,而且实参只能是一个字符串所对应的数组的名字。不能多
2: 而且这个函数他必须要求要有返回值,,,a=strlen(s1); 而且a变量一定的事先就定义,,可以不进行初始化
Tips: 探究strlen 函数的返回值的类型不同带来的影响
探究结果:(在输出返回值时的占位符均采用%d)
在int 型 long型,,结果正常
在float double 下报错 如果实在要这样搞,,必须先对待输出的返回值在printf 内做一强制类型转换
例如:
double a;
a=strlen(s1);
printf("%d", (int)a);
在bool类型下时 此时函数的返回值仅有两种结果 非零就是1 零才是0
strlen(s1)的返回值是字符数组中非空符号字符的个数,也就是有效字符数组的个数
*/
//探究strcmp函数的使用
//int a = 0;
// a=strcmp(s1, s2);
// printf("%d", a);
/*
探究结果
1: 当两个字符数组相同时,,返回0;
2: 这个函数需要返回值
3:空字符的输入
第一种 char s1={'\0'};
第二种 char s1=" ";
4: 当s1比s2大的(对应的ASCII码比较逐项比较)返回 1
5: 小 -1
6:空字符所对应的ASCII值为零,,是最小的
7: 在进行比较时是逐项进行比较且存在短路效应
*/
//如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
//探究strchr 函数的使用
char * p = NULL;
printf("%p", p);
//char ch;
//char ch = { '\0' };
//printf("请输入待查字符\n");
//scanf_s("%c", &ch);
//printf("%d", p);
//p=strchr(s1, ch);
//printf("%p", p);
// 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
/*
探究结果:
0: 新参列表装的是 待查找的字符串所对应的字符数组名 逗号 待查找的字符串中的待查找字符
例如:a=strchr (s1,a);
1: 指针类型的变量的占位符是 %p;
例如:
printf ("%p",ch);输出strchr 函数的结果
2: 此函数必须要有返回值,,而且返回值需事先进行定义,,且为指针类型
3: 此函数的返回值为,,a在字符串中的位置,,十六进制
4: 在此函数中查找空字符时,结果是0
tip:
*/
/*
strstr(s1, s2);
//返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
*/
return 0;
}
/*
在VS中string里面的函数,他会报错说这个不安全,,你要加上一个_s才得行
*/
注意再使用多维数组时,,,例如再二维数组中定义a[2][3];并进行赋值处理
比较第1行于第二行的数组,,,也就是两个字符串对应的字符数组进行比较
strcmp(a[0],a[1]);进行该操作
gets可以接受空格,,而scanf认为空格是一个字符串输入时的结尾
可以用指向一维数组的之的指针将数组名进行替换
例如
char *strcopy(char *s,char *s2);
关于C语言中string类的探究
最新推荐文章于 2022-11-29 00:36:02 发布