1) gets(); // 输入字符串
puts(); // 输出字符串 系统自动加上 \n(实际上把'\0' 自动换成'\n')
strlen(); // 计算字符串本身长度
# include "stdio.h"
int main()
{
char str[10];
gets(str); // 输入完后直接 按回车(enter)
puts(str); // 输出后自动换行 因为这个函数 (我输入abc,其实是4个字符,还有一个是\0,再执行puts函数时,把\0自动转换成\n)
printf("%d\n",strlen(str)); // 计算字符串的实际长度,不包括 '\0'
}
2)_1 strcat 字符串连接函数
# include "stdio.h"
int main()
{
char str1[20]="abcde";
char str2[7]="abd";
printf("%s\n",strcat(str1,str2)); // 有几点要注意:1)它是把str2的内容跟在str1后面,在结束时,自动加上 '\0'
// 2)由于1),所以 str1[],[]里的数字要足够的大,要足够地容纳新的字符串
printf("%s\n",str1); // 为什么输出 abcdeabd 因为 拼接完后,存在了str1中
printf("%s\n",str2); // str2,不变,因为它不是作为被 容纳的,只有被容纳的,才会改变
return 0;
}
对strcat 理解透了,再看这个 (也可以作为了解)
# include "stdio.h"
int main()
{
char str1[20]="abcde";
char str2[7]="abd";
char str3[50];
printf("%s\n",strcat(str3,str1)); // 出现这种问题,是跟内存有关,猜测:未初始化,里面存的是乱码,对于指令来说,我只要找到地址,我就可以输出,至于是不是你想要的结果,就
// 不关我的事了,对于vc++6.0 来说,我执照你的指令执行,因为我的内存里有东西,我就输出什么,调试是人写的,而且,不同的编译环境,产生
// printf("%s\n",str3); // 不一样的问题,但大体是内存这块出问题
// printf("%s\n",str1);
// printf("%s\n",str2);
return 0;
}
# include "stdio.h"
int main()
{
char str1[20]="abcde";
char str2[7]="abd";
char str3[50]="5";
printf("%s\n",strcat(str3,str1)); // 解决方法,str3未赋值前,单元里面存的东西乱码,我赋初值不就行了,
printf("%s\n",strcat(str3,str2));
printf("%s\n",str3);
printf("%s\n",str1);
printf("%s\n",str2);
return 0;
}
2)_2 strcpy 字符串复制函数 (我的理解,是为了解决strcat 不能解决的乱码问题,从而发明的这个函数)
strncpy (更灵活)
// 图片1
# include "stdio.h"
int main()
{
char str1[40];
char str2[]="I love ";
printf("%s\n",strcpy(str1,str2));
printf("%s\n",str1);
printf("%s\n",strcpy(str1,"China")); // 效果与想象中的不一样 strcpy(str1,"China") 改为 strcat 想实现 I love China的
// printf("%s\n",strcat(str1,"China"));
return 0;
}
// 图片2
# include "stdio.h"
int main()
{
char str1[40];
char str2[]="I love ";
printf("%s\n",strcpy(str1,str2));
printf("%s\n",str1);
printf("%s\n",strcat(str1,"China")); // 本行改
// printf("%s\n",strcat(str1,"China"));
return 0;
}
// 图片3
# include "stdio.h"
int main()
{
char str1[40];
char str2[]="I love ";
printf("%s\n",strcpy(str1,str2));
printf("%s\n",str1);
printf("%s\n",strcpy(str1,"China")); // 把下面一行注释去掉,不是想要的结果I love China
printf("%s\n",strcat(str1,"China"));
return 0;
}
// 图片4
# include "stdio.h"
int main()
{
char str1[40];
char str2[]="I love ";
printf("%s\n",strcpy(str1,str2));
printf("%s\n",str1);
printf("%s\n",strcat(str1,"China")); // 连接 两个字符串
printf("%s\n",strcpy(str1,"China")); // 把下面最下面一行提到本行的前面,是想要的结果I love China
// 你们肯定很疑惑,这个跟 strcpy定义有关,它是从str1的下标为0处,开始复制的,直到它本身结束,才完,
return 0;
}
strncpy 作用:从下标为 0 的地方 开始 赋值
# include "stdio.h"
int main()
{
char str1[49]="abdcdf";
char str2[15]="123456";
printf("%s\n",strncpy(str1,str2,2));
printf("%s\n",str1);
printf("%s\n",str2);
return 0;
}
3) strcmp 字符串比较函数
# include "stdio.h"
int main()
{
char str1[49]="abdcdf";
char str2[15]="abdcdf";
printf("%d\n",strcmp(str1,str2)); // 规则:从左至右逐个比较 ascii 字符串 1 == 字符串 1 ,值为0
printf("%d\n",strcmp("def","abcd")); // 字符串 1 > 字符串 1 ,值为正整数
printf("%d\n",strcmp("d","abcd")); // 字符串 1 > 字符串 1 ,值为正整数 (只要有一个大就 OK 了)最终值就出来了
printf("%d\n",strcmp("ab","abcd")); // 字符串 1 < 字符串 1 ,值为负整数
return 0;
}
4)strlwr 转为小写函数
strupr 转为大写函数