注:下列例程执行结果由VC++6.0环境编译运行。
目录
一、常用函数
1.strcpy
函数原型:char *strcpy(char *destin, char *source);
函数功能:把含有’\0’结束符的字符串source(包含’\0’)复制到另一个地址空间destin。
使用例程:
#include<stdio.h>
#include<string.h>
int main(void)
{
char string[10]={
0};
char*str1="abcdefghi";
strcpy(string,str1);
printf("%s\n",string);
return 0;
}
结果:
2.strncpy
函数原型:char *strncpy(char *dest, char *src,size_tn);
函数功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才停止复制),返回指向dest的指针。
使用例程:
#include<stdio.h>
#include<string.h>
int main(void)
{
char string[10]={
0};
char*str1="abcdefghi";
strncpy(string,str1,3);
printf("%s\n",string);
return 0;
}
结果:
3.strstr
函数原型:char *strstr(char *str1, char *str2);
函数功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)
返回值: 返回该位置的指针,如找不到,返回空指针
使用例程:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str1 = "Borland International", *str2 = "nation", *ptr;
ptr = strstr(str1, str2);
printf("The substring is: %s\n", ptr);
return 0;
}
结果:
4.strcmp
函数原型:int strcmp(char * str1,char * str2);
函数功能:比较两个字符串str1,str2
返回值:str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数
使用例程:
int main()
{
char dest[10]="abcd";
char *src="a23456";
char d2[8]="abcd";
int res;
res=strcmp(dest, src);
printf("res= %d \n", res);
res=strcmp(dest, d2);
printf("res= %d \n", res);
return 0;
}
结果:
5.strncmp
函数原型:int strncmp(char *str1,char *str2,int count)
函数功能:对str1和str2中的前count个字符按字典顺序比较
返回值:小于0:str1<str2,等于0:str1=str2,大于0:str1>str2
使用例程:
int main()
{
char dest[10]="abcd";
char *src="a23456";
char d2[8]="abcd";
int res;
res=strncmp(dest, src, 3);
printf("res= %d \n", res);
res=strncmp(dest, d2, 3);
printf("res= %d \n", res);
return 0;
}
结果:
6.strchr
函数原型:char* strchr(char* str,char ch);
函数功能:找出str指向的字符串中第一次出现字符ch的位置
返回值:返回指向该位置的指针,如找不到,则返回空指针
使用例程:
int main()
{
char dest[10]="abcd";
char* rp;
char ch= 'c';
rp=strchr(dest, ch);
if(NULL == rp)
printf("no %c exist", ch);
else
printf("pos of %c is %d\n", ch, (int)(rp-dest+1));
return 0;
}
结果:
7.strlen
函数原型:size_t strlen ( const char *s);
函数功能:计算字符串s的(unsigned int型)长度,不包括’\0’在内
返回值:s的长度,不包括’\0’在内
使用例程:
#include<stdio.h>
#include <string.h>
int main(void)
{
int i=0;
char *he = "Hello,world";
i= strlen (he);
printf ( "字符串长度为%d\n" ,i);
return 0;
}
结果:
8.strcat
函数原型:char* strcat(char * str1,char * str2);
函数功能:把字符串str2接到str1后面,str1最后的’\0’被取消
使用例程:
#include<stdio.h>
#include <string.h>
int main(void)
{
char dest[5]="abcd";
char *src="123456";
strcat(dest, src);
printf("dest= %s\n", dest);
return 0;
}
结果:
9.strncat
函数原型:char *strncat(char *dest, const char *src, size_t maxlen)
函数功能:将字符串src中前maxlen个字符连接到dest中
使用例程:
#include<stdio.h>
#include <string.h>
int main()
{
char dest[10]="abcd";
char *src="123456";
strncat(dest, src, 3);
printf("dest= %s\n", dest);
return 0;
}
结果:
10.memcpy
函数原型:void *memcpy(void *dest, const void *src, size_t n)
函数功能:内存拷贝
函数返回:指向dest的指针
使用例程:
#include<stdio.h>
#include<string.h>
int main()
{
char src[]="******************************";
char dest[]="abcdefghijlkmnopqrstuvwxyz0123456709";
char *ptr=NULL;
printf("destination before memcpy:%s\n",dest);
ptr=memcpy(dest,src,strlen(src));
if (ptr)
printf("destination after memcpy:%s\n",dest);
else
printf("memcpy failed");
return 0;
}
结果:
11.memset
函数原型:void *memset(void *s, int c, size_t n)
函数功能:字符串中的n个字节内容设置为c
函数返回:指向dest的指针
使用例程:
#include<stdio.h>
#include<string.h>
int main()
{
char buffer[]="Hello world";
printf("Buffer before memset:%s\n",buffer);
memset(buffer,'*',strlen(buffer)-1);
printf("Buffer after memset:%s\n",buffer);
return 0;
}
结果:
12.memcmp
函数原型:int memcmp(const void *buf1, const void *buf2, size_t n);
函数功能:比较内存区域buf1和buf2的前n个字节。
函数返回:
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。
#include<string.h>
#include<stdio.h>
int main()
{
char *s1 = "Hello,Programmers!";
char *s2 = "Hello,Programmers!";
int r;
r = memcmp(s1,s2,strlen(s1));
if(!r)
printf("s1 and s2 are identical\n");/*s1等于s2*/
elseif(r<0)
printf("s1 is less than s2\n");/*s1小于s2*/
else
printf("s1 is greater than s2\n");/*s1大于s2*/
return 0;
}
二、不常用函数
1.strnset
函数原型:char *strnset(char *s, int ch, size_t n)
函数功能:将字符串s中前n个字符设置为ch的值
返回值:指向s的指针
使用例程:
int main()
{
char dest[10]="abcdabc";
char* rp;
char ch= 'F';
rp=strnset(dest, ch, 4);
printf("after strnset dest is %s \n", rp);
return 0;
}
结果:
2.strset
函数原型:char *strset(char *s, int ch)
函数功能:将字符串s中所有字符设置为ch的值
返回值:指向s的指针
使用例程:
int main()
{
char dest[10]="abcdabc";
char* rp;
char ch= 'F';
rp=strset(dest, ch);
printf("after strnset dest is %s \n", rp);
printf("after strnset dest is %s \n", dest);
return 0;
}
3.strtok
函数原型:char *strtok(char *s1, const char *s2)
函数功能:分解s1字符串,用特定分隔符(s2)分隔成多个字符串
返回值:字符串s1中首次出现s2中的字符前的子字符串指针
strtok()在参数s1的字符串中发现参数s2中包涵的分割字符时,则会将该字符改为\0字符。在第一次调用时,strtok()必需给予参数s1字符串,往后的调用则将参数s1设置成 NULL。每次调用成功则返回指向被分割出片段的指针。
使用例程:
int main()
{
char dest[]="ab,cd,ef,c";
char* rp;
char ch[]= ",";
rp=strtok(dest, ch);
while(NULL != rp)
{
printf("dest: %s ", dest);
printf("rp: %s \n", rp);
rp=strtok(NULL, ch);
}
return 0;
}
说明:尽量使用可重入版的strtok,Windows平台下为strtok_s,Linux平台下为strtok_r。
牢记strtok函数族的分隔规则:忽略字符串前后的分隔符,连续的分隔符被当做一个处理。
在使用strtok前,请对源字符串进行备份,除非你可以接受字符串被修改这一事实(修改为分隔的第一个字符串)。
4.strupr
函数原型:char *strupr(char *s)
函数功能:将字符串s中的小写字母变为大写字母
使用例程:
int main()
{
char dest[]="ab,cd,EF,c";
char* rp;
rp=strupr(dest);
printf("dest: %s, rp: %s", dest, rp);
return 0;
}
结果:
注:原字符串dest 也被修改!!,对符号和大写字符无影响。
5.strlwr
函数原型:char *strlwr(char *s)
函数功能:将字符串s中的大写字母变为小写字母
使用例程:
int main()
{
char dest[]="ab,cd,EF,c";
char* rp;
rp=strlwr(dest);
printf("dest: %s, rp: %s", dest, rp);
return 0;
}
结果:
6.strrchr
函数原型:char *strrchr(const char *s, int c)
函数功能:得到字符串s中最后一个含有c字符的位置指针
返回值:位置指针
使用例程:
int main()
{
char dest[10]="abcdabc";
char* rp;
char ch= 'c';
rp=strrchr(dest, ch);
if(NULL == rp)
printf("no %c exist", ch);
else
printf("pos of %c is %d", ch, (int)(rp-dest+1));
return 0;
}
结果:
7.strtol
函数原型:long strtol(char *str, char **endptr, int base);
函数功能:将串转换为长整数
返回值:结果
示例:
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
char*string="87654321",*endptr;
long lnumber;
lnumber=strtol(string,&endptr,10);
printf("string=%s\nlong=%ld\n",string,lnumber);
return 0;
}
结果;
8.strtod
函数原型:double strtod(char *str, char **endptr);
函数功能:将字符串转换为double型值
返回值:
示例:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char* input="5.45",*endptr;
double value;
value=strtod(input,&endptr);
printf("Thestringis%s\nthenumberis%lf\n",input,value);
return 0;
}
结果:
9.strrev
函数原型: char *strrev(char *s)
函数功能: 将字符串中的所有字符颠倒次序排列
函数返回: 指向s的指针
示例:
#include<stdio.h>
#include<string.h>
int main(void)
{
char forward[]="string";
printf("Before strrev():%s\n",forward);
strrev(forward);
printf("After strrev():%s\n",forward);
return 0;
}