使用这些字符串函数时头文件要记得包含<string.h>
puts&&gets
puts的作用:将字符串输出到终端,puts函数一次只能输出一个字符串,字符串中可以包括转义字符。
gets的作用:gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *str = "aoligei!";
char *pstr;//野指针,会造成非法内存访问造成段错误
//char pstr[128];
pstr = (char *)malloc(128);//有纸才能写字,申请空间
puts(str);//自动换行
printf("%s\n",str);
//输入字符串
printf("请输入字符串\n");
gets(pstr);
puts(pstr);
system("pause");
return 0;
}
- puts()函数只能输出字符串, 不能输出数值或进行格式变换。
- 可以将字符串直接写入puts()函数中输出。
- puts 和 printf的用法一样,puts()函数的作用与语句“printf("%s\n",s);的作用相同。
- puts在输出字符串后会自动输出一个回车符。
memset
初始化函数
作用:作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *pstr;
//1.初始化对象的开头 2.初始化成什么字符 3.多大
memset(pstr,"\0", 128);
//输入字符串
printf("请输入字符串\n");
gets(pstr);
puts(pstr);
system("pause");
return 0;
}
字符串拷贝函数 strcpy && strncpy
strcpy 原型:char strcpy(char dest, const char *src);
strcpy 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
strncpy原型:char *strncpy(char *destinin, char *source, int maxlen);
strncpy功能:表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。(复制源前n个字符到目标)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//原型声明:char *strcpy(char* dest, const char *src);
char destSrc[128] = {'\0'};
char *strSrc = "pretty!";
//方式一
strcpy(destSrc,strSrc);
puts(destSrc);
puts(strSrc);
//方式二
strcpy(destSrc,"奥里给");
puts(destSrc);
puts(strSrc);
memset(destSrc,'\0',sizeof(destSrc)/sizeof(destSrc[0]));
strncpy(destSrc,strSrc,2);
puts(destSrc);
system("pause");
return 0;
}
字符串拼接函数strcat
char *strcat(char *dest, const char *src);
功能:把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//原型声明:char *strcpy(char* dest, const char *src);
char destSrc[128] = {'\0'};
char *strSrc = "pretty!";
char test[] = "牛逼:";
strcat(test,strSrc);
puts(test);
system("pause");
return 0;
}
字符串比较函数strcmp
extern int strcmp(const char *s1,const char *s2);
功能:strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *s1 = "1234";
char *s2 = "123";
int ret;
ret = strcmp(s1,s2);
printf("%d\n",ret);
system("pause");
return 0;
}
查找字符函数strchr
功能:在一个字符串中搜索第一次出现的查询字符的位置。如果字符串中不包含该字符则返回NULL空指针.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *p = "Ken";
char c = 'X';
char *z = NULL;
z = strchr(p,c);
if(z == NULL)
{
printf("1未找到!\n");
}else
{
printf("1已找到!\n");
puts(z);
}
system("pause");
return 0;
}
查找字符串函数strstr();
char *strstr(const char *haystack, const char *needle)
功能: 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *p = "ZhangSan";
char c = 'X';
char *z = NULL;
char *x ="in" ;
z = strstr(p,x);
if(z == NULL)
{
printf("2未找到!\n");
}else
{
printf("2已找到!\n");
puts(z);
}
system("pause");
return 0;
}
转为小写的函数strlwr();
extern char *strlwr(char *s);
功能:strlwr函数的功能是将字符串中的S参数转换为小写形式。只转换s参数中出现的大写字母,不改变其它字符。返回指向s参数的指针。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "ZhangSAN";//windows环境下要用数组定义方式
puts(strlwr(str));
system("pause");
return 0;
}
转为大写的函数strupr();
原型:extern char *strupr(char *s);
说明:只转换s参数中出现的大写字母,不改变其它字符。返回指向s参数的指针。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "ZhangSAN";//windows环境下要用数组定义方式
puts(strupr(str1));
system("pause");
return 0;
}
字符串分割函数strtok();
原型:char *strtok(char s[], const char *delim);
功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str1[] = "ZhangSan";
puts(strupr(str1));
char *pp[10];
int i=0;
char str2[] = "Zhang,San,hello";
//获取第一个字符串
z = strtok(str2,",");
pp[0] = z;
puts(z);
while(1)
{
i++;
z = strtok(NULL,",");
pp[i] = z;
if(z!=NULL)
{
puts(z);
}else
{
printf("字符串分割结束!\n");
break;
}
}
int j;
for(j=0;j<=i;j++)
{
puts(pp[j]);
}
/*//获取第二个字符串
z = strtok(NULL,",");
puts(z);
//获取第三个字符串
z = strtok(NULL,",");
puts(z);*/
system("pause");
return 0;
}