当前位置:文档之家› c语言函数库-第四章(字符串函数)

c语言函数库-第四章(字符串函数)

c语言函数库-第四章(字符串函数)
c语言函数库-第四章(字符串函数)

c语言函数库

第四章(字符串函数)

1. atof:字符串转浮点型函数 (1)

2. atoi:字符串转整型函数 (2)

3. atol:字符串转长整型函数 (3)

4. memchr:字符搜索函数 (3)

5. memcmp:字符串比较函数 (4)

6. memcpy:字符串拷贝函数 (5)

7. memmove:字块移动函数 (6)

8.memset:字符加载函数 (7)

9. strcat:字符串连接函数 (8)

10. strchr:字符串中字符首次匹配函数 (9)

11. strcmp:字符串比较函数 (10)

12. strcpy:字符串拷贝函数 (11)

13. strcspn:字符集逆匹配函数 (12)

14. strdup:字符串新建拷贝函数 (13)

15. strerror:字符串错误信息函数 (13)

16. strlen:计算字符串长度函数 (14)

17. strlwr:字符串小写转换函数 (15)

18. strncat:字符串连接函数 (16)

19. strncmp:字符串子串比较函数 (17)

20. strncpy:字符串子串拷贝函数 (18)

21. strpbrk:字符集字符匹配函数 (19)

22. strrchr:字符串中字符末次匹配函数 (20)

23. strrev:字符串倒转函数 (21)

24. strset:字符串设定函数 (21)

25. strspn:字符集匹配函数 (22)

26. strstr:字符串匹配函数 (23)

27. strtod:字符串转换成双精度函数 (24)

28. strtok:字符串分隔函数 (25)

29. strtol:字符串转换成长整型函数 (26)

30. strtoul:字符串转换成无符号长整型函数 (27)

31. strupr:字符串大写转换函数 (28)

32. strupr:字符串大写转换函数 (29)

1.atof:字符串转浮点型函数

函数原型:float atof(const char *str);

头文件:#include

是否是标准函数:是

函数功能:将字符串转换成浮点值,也就是将字符串str转换成浮点值然后获取转换后的结果。

返回值:返回转换后的浮点值

例程如下:应用atol将字符串转换成浮点值。

#include

#include

int main(void)

{

char *str="12345.67";

float result;

result=atof(str);

printf("string=%s\nfloat =%f\n",str,result);

getch();

return 0;

}

例程说明:

(1)首先,程序声明了一个字符串作为待转换的字符串,声明的浮点型变量result用于获取转换结果。

(2)程序通过调用atol将字符串转换为相应的浮点型变量,获取转换结果,转换规则与strtoX函数相同。

(3)最后将转换结果打印出来。

本例程的运行结果是:

string =12345.67

float=12345.669922

注意:本例程中,转换成浮点数的结果有些奇怪,它并不等于我们字符串中变量的值,而是存在一定的误差,虽然误差很小,但是可以看出误差是从原字符串中的最后一位开始的,这是由于在转换过程中函数内部在实现时采用的转换方式造成的,如果想避免这种误差,可以使用strtoX系列函数。

2.atoi:字符串转整型函数

函数原型:int atoi(const char *str);

头文件:#include

是否是标准函数:是

函数功能:将字符串转换成整数值,也就是将字符串str转换成整型值然后获取转换后的结果。

返回值:返回转换后的整型值

例程如下:应用atoi将字符串转换成整型值。

#include

#include

int main(void)

{

char *str="12345.67";

int result;

result=atoi(str);

printf("string=%s\ninteger=%d\n",str,result);

getch();

return 0;

}

例程说明:

(1)首先,程序声明了一个字符串作为待转换的字符串,声明的整型变量result用于获取转换结果。

(2)程序通过调用atoi将字符串转换为相应的整型变量,获取转换结果,转换规则与strtoX函数相同。

(3)最后将转换结果打印出来。

本例程的运行结果是:

string =12345.67

integer=12345

3.atol:字符串转长整型函数

函数原型:long atol(const char *str);

头文件:#include

是否是标准函数:是

函数功能:将字符串转换成长整数值,也就是将字符串str转换成长整型值然后获取转换后的结果。

返回值:返回转换后的长整型值

例程如下:应用atol将字符串转换成长整型值。

#include

#include

int main(void)

{

char *str="12345.67";

long result;

result=atol(str);

printf("string=%s\nlong =%ld\n",str,result);

getch();

return 0;

}

例程说明:

(1)首先,程序声明了一个字符串作为待转换的字符串,声明的长整型变量result用于获取转换结果。

(2)程序通过调用atol将字符串转换为相应的长整型变量,获取转换结果,转换规则与strtoX函数相同。

(3)最后将转换结果打印出来。

本例程的运行结果是:

string =12345.67

long=12345

4.memchr:字符搜索函数

函数原型:void *memchr(void *s, char ch, unsigned n)

头文件:#include

是否是标准函数:是

函数功能:在数组的前n个字节中搜索字符ch。

返回值:返回一个指针,它指向ch在s 中第一次出现的位置。如果在s的前n个字符中找不到匹配,返回NULL。

例程12.31应用函数memchr搜索一个字符串的子串。

#include

#include

int main(void)

{

char *str="I love China\n";

char *p;

p=memchr(str,'C',strlen(str));

if(p)

printf("%s",p);

else

printf("The character was not found\n") ;

}

例程说明:

(1)首先初始化字符串“I love China\n”,将首地址赋值给str。

(2)在字符串str中查找字符’C’出现的位置,并返回以第一个字符’C’开头的字符子串的指针。

(3)如果返回值不为NULL,打印该子串。

本例程的运行结果为:

China

5.memcmp:字符串比较函数

函数原型:void *memcmp(char *s1, char *s2, unsigned n)

头文件:#include

是否是标准函数:是

函数功能:比较s1所指向的字符串与s2所指向的字符串的前n个字符。

返回值:根据s1所指向的对象的大于、等于、小于s2所指向的对象,函数memcmp 分别返回大于、等于、小于0的值。

例程如下:比较两个字符串。

#include

#include

int main(void)

{

char *str1="ABCDEF";

char *str2="ABCDEf";

int s1,s2;

s1=memcmp(str1,str2,6);

s2=memcmp(str1,str2,5);

printf("The comparison of 6 character\n");

if(s1>0)printf("%s>%s\n",str1,str2);

else

if(s1<0)printf("%s<%s\n",str1,str2);

else

printf("%s=%s\n",str1,str2);

printf("The comparison of 5 character\n");

if(s2>0)printf("%s>%s\n",str1,str2);

else

if(s2<0)printf("%s<%s\n",str1,str2);

else

printf("%s=%s\n",str1,str2);

}

例程说明:

(1)首先初始化两个字符串“ABCDEF”和“ABCDEf”。

(2)然后应用函数memcmp将这两个字符串按照不同的字符个数进行比较,将返回的比较结果复制给变量s1和s2。

(3)显示比较结果。

本例程的运行结果为:

The comparison of 6 character

ABCDEF

The comparison of 5 character

ABCDEF=ABCDEf

注意:

由于字符串比较的方法是从左至右按照字符的ASCII码进行比较的,因此在比较6个字符时,字符串“ABCDEF”<“ABCDEf”(f的ASCII值大于F的ASCII值);而只比较5个字符时,字符串“ABCDEF”=“ABCDEf”。

6.memcpy:字符串拷贝函数

函数原型:void *memcpy(void *destin, void *source, unsigned n)

头文件:#include

是否是标准函数:是

函数功能:从source所指的对象中复制n个字符到destin所指的对象中。但是,如果这种复制发生在重叠对象之间,其行为是不可预知的。

返回值:destin

例程如下:利用函数memcpy进行字符串拷贝。

#include

#include

int main(void)

{

char *s = "##########";

char *d = "This is a test for memcpy function";

char *ptr;

printf("destination before memcpy: %s\n", d);

ptr = memcpy(d, s, strlen(s));

if (ptr)

printf("destination after memcpy: %s\n", d);

else

printf("memcpy failed\n");

return 0;

}

例程说明:

(1)首先定义两个字符串s和d,并赋初值,且d的长度大于s。

(2)显示字符串d的原始内容。

(3)通过函数memcpy将字符串s复制到字符串d中,并返回字符串d的首指针。

(4)如果拷贝成功,再次显示字符串d的内容。

本例程的运行结果为:

destination before memcpy: This is a test for memcpy function

destination after memcpy: ##########test for memcpy function

注意:

1、memcpy与strcpy的不同在于应用memcpy进行字符串的拷贝可以指定拷贝串的长度。另外memcpy的参数为void指针类型,因此它还可以对非字符型对象进行操作,而strcpy 只适用于字符串的拷贝。

2、前面提到,如果复制过程中发生在重叠对象之间,其行为是不可预知的。例如下面这个例子:

#include

#include

int main(void)

{

char *d = "1234567890";

char *p;

p=d+3;

printf(" %s\n", d);

memcpy(p, d, 6);

printf(" %s\n", d);

return 0;

}

由于字符串p是字符串d的一个子串,在调用memcpy时,复制的字符串在d和p之间又重叠,因此该复制行为是不可预知的,结果也自然难以保证。这段程序的运行结果为:1234567890

1231231230

显然这不是期望得到的结果。

7.memmove:字块移动函数

函数原型:void *memmove(void *destin, void *source, unsigned n)

头文件:#include

是否是标准函数:是

函数功能:从source所指的对象中复制n个字符到destin所指的对象中。与memcpy 不同的是,当对象重叠时,该函数仍能正确执行。

返回值:destin

例程如下:利用函数memmove进行字符块的移动

#include

#include

int main(void)

{

char *s = "##########";

char *d = "This is a test for memcpy function";

char *ptr;

printf("destination before memmove: %s\n", d);

ptr = memmove(d, s, strlen(s));

if (ptr)

printf("destination after memmove: %s\n", d);

else

printf("memcpy failed\n");

return 0;

}

例程说明:

(1)首先定义两个字符串s和d,并赋初值,且d的长度大于s。

(2)显示字符串d的原始内容。

(3)通过函数memmove将字符串s复制到字符串d中,并返回字符串d的首指针。

(4)如果拷贝成功,再次显示字符串d的内容。

本例程的运行结果为:

destination before memmove: This is a test for memcpy function

destination after memmove: ##########test for memcpy function

注意:

与函数memcpy不同的是,当对象重叠时,该函数仍能正确执行。例如下面这个例子:#include

#include

int main(void)

{

char *d = "1234567890";

char *p;

p=d+3;

printf(" %s\n", d);

memmove(p, d, 6);

printf(" %s\n", d);

return 0;

}

虽然复制的字符串在d和p之间又重叠,但本段程序的运行结果为:

1234567890

1231234560

显然这是期望得到的结果。

这是因为函数memmove的复制行为类似于先从source对象中复制n个字符到一个与source和destin都不重合的含n个字符的临时数组中作为缓冲,然后从临时数组中再复制n 个字符destin所指的对象中。

就本段程序而言,memmove先将字符串“123456”复制到一个临时数组中,再将它复制到以p为首地址的字符串中。

8. memset:字符加载函数

函数原型:void *memset(void *s, int c, unsigned n)

头文件:#include

是否是标准函数:是

函数功能:把c复制到s所指向的对象的前n个字符的每一个字符中。

返回值:s的值

例程如下:应用memset函数替换字符串中的字符。

#include

#include

int main(void)

{

char *str="AAAAAAAAAAAAAAAAAA";

printf("The original string is: %s\n",str);

memset(str,'B',9);

printf("The string after memset is:%s\n",str);

}

例程说明:

(1)首先初始化字符串“AAAAAAAAAAAAAAAAAA”,将首地址赋值给str。

(2)显示该字符串。

(3)利用函数memset将字符串str的前9个字符替换为’B’。

(4)显示替换后的字符串。

本例程的运行结果为:

The original string is: AAAAAAAAAAAAAAAAAA

The string after memset is:BBBBBBBBBAAAAAAAAA

9.strcat:字符串连接函数

函数原型:char *strcat (char *dest,char *src);

头文件:#include

是否是标准函数:是

函数功能:将两个字符串连接合并成一个字符串,也就是把字符串src连接到字符串dest 后面,连接后的结果放在字符串dest中

返回值:指向字符串dest的指针

例程如下:应用strcat连接字符串。

#include

#include

int main( )

{

char dest[20]={“ ”};

char *hello = "hello ", *space = " ", *world = "world";

strcat(dest, hello);

strcat(dest, space);

strcat(dest, world);

printf("%s\n", destination);

getch();

return 0;

}

例程说明:

(1)首先,程序声明了一个字符数组和三个字符串变量,将字符数组dest初始化位空串,其余三个字符串变量分别赋予初值。

(2)程序通过调用strcat函数实现字符串的连接,首先将字符串hello添加到字符数组dest的末端,此时字符数组dest的值有空串变为"hello",然后继续调用两次strcat函数,依次将字符串space和字符串world陆续连接到字符数组dest的末端,从而完成整个字符串的连接操作。

(3)最后将最终的结果输出。

本例程的运行结果是:

hello world

注意:本例程中,开始对字符数组dest初始化位空是必要的,对声明的变量进行初始化是一个很好的习惯,如果不对字符数组dest进行初始化程序会产生运行时的错误,有兴趣的读者可以试试未初始化程序的输出结果。

10.strchr:字符串中字符首次匹配函数

函数原型:char *strchr(char *str, char c);

头文件:#include

是否是标准函数:是

函数功能:在字符串中查找给定字符的第一次匹配,也就是在字符串str中查找字符c 第一次出现的位置

返回值:第一次匹配位置的指针

例程如下:应用strchr匹配字符串中字符。

#include

#include

int main(void)

{

char str[15] ={""};

char *ptr, c = 'r';

strcpy(str, "Hello World");

ptr = strchr(str, c);

if (ptr)

printf("The character %c is at position: %d\n", c, ptr-str);

else

printf("The character was not found\n");

strcpy(str, "Aloha");

if (ptr)

printf("The character %c is at position: %d\n", c, ptr-str);

else

printf("The character was not found\n");

getch();

return 0;

}

例程说明:

(1)首先,程序声明了一个字符串和一个字符数组以及一个字符,并对字符变量赋予了我们要查找的值。

(2)程序通过调用strcpy 赋予了字符数组一个值,然后调用strchr函数在字符数组中查找第一次与字符变量c匹配的字符,也就是查找第一个'r' 字符,返回的结果为指向第一个匹配字符的指针。根据返回值输出匹配结果。

(3)程序第二次通过调用strcpy 赋予了字符数组一个值,然后调用strchr函数在字符数组中查找第一次与字符变量c匹配的字符,也就是查找第一个'r' 字符,最后根据返回值输出匹配结果。

(4)第二次匹配已经给字符串重新赋值,我们理解新的字符串似乎应该是"Aloha",从而没有与'r'匹配的字符,但实际的运行结果却令人大吃一惊。这时因为在重新赋值时"Aloha"虽然将"Hello"覆盖掉,但是后面的字符仍然在数组中保留,因此在做匹配的时候仍然得到与第一次匹配相同的结果。

(5)对结果进行输出时,如果匹配成功,那么我们输出匹配的字符在数组中的位置,如果匹配不成功,则显示没有找到。

本例程的运行结果是:

The character r is at position 8

The character r is at position 8

注意:本例程中,对字符串中字符匹配的返回值是指向匹配位臵的指针,我们获取到该指针后,与数组的头指针做减法,也就是与数组变量名做减法,就可以获得我们得到的指针在数组中对应的下标。

11.strcmp:字符串比较函数

函数原型:int strcmp (char *str1,char * str2);

头文件:#include

是否是标准函数:是

函数功能:比较两个字符串的大小,也就是把字符串str1和字符串str2从首字符开始逐字符的进行比较,直到某个字符不相同或比较到最后一个字符为止,字符的比较为ASIC 码的比较

返回值:若字符串str1大于字符串str2返回结果大于零,若字符串str1小于字符串str2返回结果小于零,若字符串str1等于字符串str2返回结果等于零

例程如下:应用strcmp比较字符串大小。

#include

#include

int main(void)

{

char *str1 = "Canada", *str2 = "China", *str3 = "china";

int result;

result = strcmp(str1, str2);

if (result < 0)

printf("%s is less than %s", str1,str2);

else

printf("%s is not less than %s", str1,str2);

printf("\n");

result = strcmp(str2, str3);

if (result < 0)

printf("%s is less than %s", str2,str3);

else

printf("%s is not less than %s", str2,str3);

getch();

return 0;

}

例程说明:

(1)首先,程序声明了三个字符串变量并分别赋予了初值,注意字符串str2和字符串str3的区别在于首字母是否大写,整型变量result用于记录字符串的比较结果。

(2)程序通过调用strcmp函数比较字符串str1和字符串str2,在首字符相同的情况下第二个字符' a'的ASIC码小于' h'的ASIC码,因此比较结果为字符串str1小于字符串str2,返回结果小于零。第二次调用strcmp函数比较字符串str2和字符串str3,由于在ASIC码表中小写字母在后,小写字母的ASIC码大于大写字母,即' C'小于' c',因此比较结果为字符串str2小于字符串str3,返回结果小于零。

(3)最后将最终的结果输出,为了使输出结果一目了然,在两次比较中间的printf函

数输出了一个换行。

本例程的运行结果是:

Canada is less than China

China is less than china

注意:本例程中,字符串的比较结果为首个两个不等字符之间ASIC码的差值,如果我们将第一次比较的结果result输出,应该是' a'的ASIC与码与' h'的ASIC码的差值,有兴趣的读者可以试试输出结果。

12.strcpy:字符串拷贝函数

函数原型:char * strcpy (char *dest,char * src);

头文件:#include

是否是标准函数:是

函数功能:实现字符串的拷贝工作,也就是把字符串src中的内容拷贝到字符串dest 中,使两个字符串的内容相同。

返回值:指向字符串dest的指针

例程如下:应用strcpy实现字符串拷贝。

#include

#include

int main(void)

{

char dest[20] ={""};

char *src = "Hello World";

int result;

strcpy(dest,src);

printf("%s\n", dest);

result=strcmp(dest,src);

if(!result)

printf("dest is equal to src");

else

printf("dest is not equal to src");

getch();

return 0;

}

例程说明:

(1)首先,程序声明了一个字符串和一个字符数组并给分别赋予了初值,整型变量result 用于记录字符串子串的比较结果。

(2)程序通过调用strcpy函数将字符串src中的内容拷贝到字符数组dest中,使得两者具有相同的内容。为了验证两个变量中的内容是否真的一样,通过调用strcmp对两个字符串中的内容进行比较。

(3)最后将拷贝结果和比较结果输出。

本例程的运行结果是:

Hello World

dest is equal to src

注意:本例程中,向字符数组中赋值时要保证字符数组中有足够的空间,虽然有时候即便空间不够也会打印出正确的结果,但随着程序的运行,不能保证超出下标范围的部分还能以正确的型式存在。

函数原型:int strcspn(char *str1, char *str2);

头文件:#include

是否是标准函数:是

函数功能:在字符串中查找第一个属于字符集的下标,即从开始有多少个字符不属于字符集,也就是在字符串str1中查找第一个属于字符集str2中任何一个字符的下标,即字符串str1中从开始一直有多少个字符不属于字符集str2中的字符。

返回值:所找到的字符串中段的长度

例程如下:应用strspn逆匹配字符串中字符集。

#include

#include

int main(void)

{

char *str1="tomato",*str2="carrot";

char *str= "abc";

int result;

result = strcspn(str1,str);

if(result)

printf("The first %d is congruent\n",result);

else

printf("No character is congruent\n");

result = strcspn(str2,str);

if(result)

printf("The first %d is congruent\n",result);

else

printf("No character is congruent\n");

getch();

return 0;

}

例程说明:

(1)首先,程序声明了三个字符串并分别赋予初值,其中最后一个变量是用于逆匹配的字符集。

(2)程序通过调用strcspn进行字符集的逆匹配,它从字符串str1中的第一个字符开始检查是不是属于字符串str中的任意字符,如果不属于就继续逆匹配,直到逆匹配不成功,本例中会发现直到遇到字符'a'才逆匹配失败,因为字符'a'属于字符串str中的某个字符。然后输出匹配结果。

(3)程序第二次通过调用strspn对字符串str2进行字符集逆匹配,发现第一个字符即属于字符集str中的某字符。

(4)输出匹配结果是显示前多少个字符逆匹配成功。

本例程的运行结果是:

The first 3 is congruent

No character is congruent

注意:本例程中,字符集逆匹配与字符集匹配两者的匹配方式截然相反,字符串匹配是当字符串中字符等于字符集中任意字符是匹配成功,字符串逆匹配是当字符串中字符不等于字符集中任意字符是匹配成功。

函数原型:char *strdup(char *str);

头文件:#include

是否是标准函数:是

函数功能:将字符串拷贝到新分配的空间位置,也就是将str拷贝到一块新分配的存储空间,其内部使用动态分配内存技术实现的,分配给字符串的空间来自于当前所用内存模式制定的堆。

返回值:返回指向含有该串拷贝的存储区

例程如下:应用strdup将字符串拷贝到新建位置处。

#include

#include

int main(void)

{

char *src="This is the buffer text";

char *dest;

dest=strdup(src);

if(!strcmp(src,dest))

printf("Copy success\n%s\n",dest);

else

printf("Copy failure");

free(dest);

getch();

return 0;

}

例程说明:

(1)首先,程序声明了两个字符串并给第一个字符串赋于初值,此时并未给字符串dest 分配任何空间。

(2)程序通过调用strdup将字符串拷贝到新建位置处,通过动态分配内存技术将新分配一个与字符串src大小相同的存储区并完成字符串的复制工作,然后返回该存储区并让dest指向该区域。

(3)程序通过调用strcmp比较复制前后的字符串,如果复制成功而这应当相同,函数返回值为零,并打印拷贝结果。

(4)由于新分配的存储区是通过动态分配内存技术实现的,因此在程序退出之前要将分配的存储区显示的释放。

本例程的运行结果是:

Copy success

This is the buffer text

注意:本例程中,初学者往往会忽视释放动态分配存储区的操作,虽然表面看起来似乎对程序没有什么影响,但实际上不对存储区进行回收会造成内存泄漏,在一些大程序会造成致命的后果。

15.strerror:字符串错误信息函数

函数原型:char *strerror(int errnum);

头文件:#include

是否是标准函数:是

函数功能:获取程序出现错误的字符串信息,也就是根据错误代码errnum查找到具体的错误信息。

返回值:返回错误信息

例程如下:应用strerror查看几种错误信息。

#include

#include

int main(void)

{

char *error;

int i;

for(i=0;i<12;i++)

{

error=strerror(i);

printf("%s",error);

}

getch();

return 0;

}

例程说明:

(1)首先,程序声明了一个字符串用于获取错误信息,声明的整型变量既作为循环变量又作为错误信息代码。

(2)程序通过调用strerror根据错误代码获取到具体的错误信息,其中这些代表具体错误信息的字符串在相应的头文件中定义。循环只取了前十二种错误信息,实际的错误种类还有更多。

(3)每次循环将具体错误信息打印出来。

本例程的运行结果是:

Error 0

Invalid function number

No such file or directory

Path not found

Too many open files

Permission denied

Bad file number

Memory arena trashed

Not enough memory

Invalid memory block address

Invalid environment

Invalid format

注意:本例程中,如果读者有兴趣,不妨看看一共系统定义了多少种错误信息,通过更改循环变量将各种错误信息打印出来。

16.strlen:计算字符串长度函数

函数原型:int strlrn (char *str);

头文件:#include

是否是标准函数:是

函数功能:求字符串的长度,也就是求字符串str中有多少个字符

返回值:字符串str字符的个数

例程如下:应用strlen求字符串长度。

#include

#include

int main(void)

{

char src1[3]={""},src2[10]={"Hello"};

char *src3="Hello";

printf("%d\n",strlen(src1));

printf("%d\n",strlen(src2));

printf("%d\n",strlen(src3));

getch();

return 0;

}

例程说明:

(1)首先,程序声明了一个字符串和两个字符数组并给分别赋予了初值,我们将字符串src3与字符数组src2赋予相同的初值。

(2)程序通过调用strlen函数分别求出三个变量字符的长度。在求字符长度时,返回的结果是有效字符的个数,因此虽然字符数组src1由十个字符变量组成,但初值为空串,因此长度为零,并不等于数组长度。由于字符串src3与字符数组src2赋予相同的初值,因此两者长度相同。

(3)最后将字符串或字符数组的长度值输出。

本例程的运行结果是:

5

5

注意:本例程中,如果将字符数组src2拷贝到字符数组src1中,并不会产生任何编译错误,但是程序运行时会产生不可预知的结果,有兴趣的读者可以试试完成拷贝后将三个变量的长度输出。

17.strlwr:字符串小写转换函数

函数原型:char *strlwr(char *str,);

头文件:#include

是否是标准函数:否

函数功能:将字符串原有大写字符全部转换为小写字符,也就是将字符串str中的所有字符变成小写。

返回值:返回指向被转换字符串的指针

例程如下:应用strlwr将字符串转换成小写字符。

#include

#include

int main(void)

{

char *s="You'll Never Walk Alone";

printf("%s",strlwr(s));

getch();

return 0;

}

例程说明:

(1)首先,程序声明了一个字符串为待转换字符串并赋予初值。

(2)程序通过调用strlwr将字符串中的所有大写字符转换成小写字符,并返回转换后的结果。

(3)最后将转换结果打印出来。

本例程的运行结果是:

you'll never walk alone

18.strncat:字符串连接函数

函数原型:char *strncat (char *dest, char *src, int n);

头文件:#include

是否是标准函数:是

函数功能:将一个字符串的子串连接到另一个字符串末端,也就是把字符串src的前n 个字符连接到字符串dest后面,连接后的结果放在字符串dest中

返回值:指向字符串dest的指针

例程如下:应用strncat连接字符串子串。

#include

#include

#include

int main(void)

{

char dest[30]={""};

char *favorite = "I love", *tabs = "\t\n", *language = "C++";

strcnat(dest, favorite,6);

strncat(dest, tabs,1);

strncat(dest, language,1);

printf("%s\n", dest);

getch();

return 0;

}

例程说明:

(1)首先,程序声明了一个字符数组和三个字符串变量,将字符数组dest初始化位空串,其余三个字符串变量分别赋予初值,其中字符串tans由两个字符组成,一个制表符和一个换行符。

(2)程序通过调用strncat函数实现字符串子串的连接,首先将字符串favorite的前六个字符添加到字符数组dest的末端,其效果与直接调用strcat函数相同,然后继续调用两次strncat函数,依次将字符串tabs和字符串language的首字符陆续连接到字符数组dest的末端,从而完成整个字符串子串的连接操作。

(3)最后将最终的结果输出,由于未将字符串tabs中的换行符添加到字符数组dest中,因此所有输出结果应在同一行。

本例程的运行结果是:

I love C

注意:本例程中,字符串tabs中的内容比较新奇,它并不是我们一般的字符,而是两个转义说明符构成的特殊字符,C语言内部在处理过程中遇到转义说明符时会作特殊处理,本例中会将' \t'看做制表符,将' \n'看做换行符。

19.strncmp:字符串子串比较函数

函数原型:int strncmp (char *str1,char * str2, int n);

头文件:#include

是否是标准函数:是

函数功能:比较两个字符串子串的大小,也就是把字符串str1的前n个字符组成的子串和字符串str2的前n个字符组成的子串进行比较,从首字符开始逐字符的进行比较,直到某个字符不相同或比较到第n个字符为止。

返回值:若字符串str1前n个字符组成的子串大于字符串str2前n个字符组成的子串返回结果大于零,若字符串str1前n个字符组成的子串小于字符串str2前n个字符组成的子串返回结果小于零,若字符串str1前n个字符组成的子串等于字符串str2前n个字符组成的子串返回结果等于零

例程如下:应用strncmp比较字符串子串大小。

#include

#include

int main(void)

{

char *str1="Hello World";

char *str2="Hello C Programme";

int result;

result=strncmp(str1,str2,5);

if(!result)

printf("%s is identical to %s in the first 5 words",str1,str2);

else if(result<0)

printf("%s is less than %s in the first 5 words",str1,str2);

else

printf("%s is great than %s in the first 5 words",str1,str2);

printf("\n");

result=strncmp(str1,str2,10);

if(!result)

printf("%s is identical to %s in the first 10 words",str1,str2);

else if(result<0)

printf("%s is less than %s in the first 10 words",str1,str2);

else

printf("%s is great than %s in the first 10 words",str1,str2);

getch();

return 0;

}

例程说明:

(1)首先,程序声明了两个字符串变量并分别赋予了初值,整型变量result用于记录字符串子串的比较结果。

(2)程序通过调用strncmp函数比较字符串str1和字符串str2的前5个字符组成的子串,由于两个字符串的前五个字符相同,因此两个子串的比较结果应为相等,返回结果为零。然后将比较结果输出。

(3)程序第二次调用strncmp函数比较字符串str2和字符串str3的前10个字符组成的子串,由于从第七个字符开始出现不等的情况,分别为' w'和' C',根据ASIC码表中小写字母在后,即' w'的ASIC码大,返回结果大于零。最后输出比较结果。

(4)输出时显示的输出比较结果并指明比较范围。

本例程的运行结果是:

Hello World is identical to Hello C Programme in the first 5 words

Hello World is great than Hello C Programme in the first 10 words

注意:本例程中,要注意子串比较的过程中子串的大小应不小于零且不超过字符串的长度,虽然子串的长短参数不会产生编译时的错误和最终结果的输出,但在比较前检查比较范围是一个很好的习惯。

20.strncpy:字符串子串拷贝函数

函数原型:char * strncpy (char *dest,char * src, int n);

头文件:#include

是否是标准函数:是

函数功能:实现字符串子串的拷贝工作,也就是把字符串src中的前n个字符拷贝到字符串dest中。

返回值:指向字符串dest的指针

例程如下:应用strncpy实现字符串子串拷贝。

#include

#include

int main(void)

{

char dest[20]={""};

char *src1="Hello World",*src2 ="Aloha";

strncpy(dest,src1,5);

strncpy(dest,src2,5);

if(!strcmp(dest,src1))

printf("dest is equal to src1");

else if(!strcmp(dest,src2))

printf("dest is equal to src2");

else

printf("dest is %s",dest);

printf("%s\n", dest);

getch();

return 0;

}

例程说明:

(1)首先,程序声明了两个字符串和一个字符数组并分别赋予了初值,本例中省去了用于记录比较结果result变量。

(2)程序通过调用strncpy函数将字符串src1中的前五个字符组成的子串拷贝到字符数组dest中,然后又将调用strncpy函数将字符串src2中的前五个字符组成的子串拷贝到字符数组dest中。通过调用一系列的strcmp字符串比较函数,从而达到验证dest变量中的最终内容的目的。

(3)最终的字符串dest中内容的到底是什么呢,是"Hello",还是"Aloha",亦或是" HelloAloha"。通过第一次调用strncpy函数,字符串dest中的内容由空串变成"Hello",再次调用strncpy函数则会从字符串dest的下标为零处逐一覆盖,也就是"Aloha"覆盖了原来的" Hello ",并不是将"Aloha"添加到末端。

(4)最后将拷贝结果和验证结果输出。

本例程的运行结果是:

Aloha

dest is equal to src2

注意:本例程中,在检验字符串dest的内容时,if判断中并没有使用像上例中的result变量,

我们只关心比较的结果是否为零,直接通过将函数作为判断条件,从而利用函数的返回值进行判断是一个简单而有效的方法。

21.strpbrk:字符集字符匹配函数

函数原型:char *strpbrk(char *str1, char *str2);

头文件:#include

是否是标准函数:是

函数功能:在字符串中查找第一个属于字符集的字符位置,也就是在字符串str1中查找第一个属于字符集str2中任意字符的位置。

返回值:返回第一个匹配字符的指针

例程如下:应用strpbrk匹配字符集字符。

#include

#include

int main(void)

{

char *str1="There are 5 pigs in the hogpen";

char *str2="0123456789";

char *result;

result = strpbrk(str1,str2);

if(result)

printf("%s\n",result++);

else

printf("There are no numbers any more");

result = strpbrk(result,str2);

if(result)

printf("%s\n",result++);

else

printf("There are no numbers any more");

getch();

return 0;

}

例程说明:

(1)首先,程序声明了三个字符串变量并给前两个变量赋予初值,其中字符指针result 用于记录匹配字符的位置。

(2)程序通过调用strcspn进行字符集字符的匹配,它从字符串str1中查找第一个属于字符集str2中任意字符的字符,具体到本例中就是在字符串str1种查找第一个数字字符,如果匹配成功我们会获得指向第一个数字字符的指针,利用该返回值输出匹配结果。

(3)然后我们在上一次匹配字符的下一个字符作为首字符的子串中继续匹配,程序第二次通过调用strspn完成上述功能,并用同样的输出方式输出匹配结果,如没有数字字符可以获得显示匹配失败。

(4)输出匹配结果时我们并没有将匹配的字符输出,取而代之的是将以匹配字符作为第一个字符的字符串字串输出。

本例程的运行结果是:

5 pigs in the hogpen

There are no numbers any more

注意:本例程中,值得注意的是匹配成功时结果的输出。由于获得了匹配成功的字符的指针,因此我们可以利用该指针输出字符串的字串,利用自增操作符我们移动一个位臵又可以对尚未匹配的子串继续进行下一次匹配。

22.strrchr:字符串中字符末次匹配函数

函数原型:char *strrchr(char *str, char c);

头文件:#include

是否是标准函数:是

函数功能:在字符串中查找给定字符的最后一次匹配,也就是在字符串str中查找字符c最后一次出现的位置

返回值:最后一次匹配位置的指针

例程如下:应用strrchr匹配字符串中字符。

#include

#include

int main(void)

{

char str[15]={""};

char *ptr, c = 'o';

strcpy(str, "Hello World");

ptr = strchr(str, c);

if (ptr)

printf("The first character %c is at position: %d\n", c, ptr-str);

else

printf("The character was not found\n");

ptr = strrchr(str, c);

if (ptr)

printf("The last character %c is at position: %d\n", c, ptr-str);

else

printf("The character was not found\n");

getch();

return 0;

}

例程说明:

(1)首先,程序声明了一个字符串和一个字符数组以及一个字符,并对字符变量赋予了我们要查找的值。

(2)程序通过调用strcpy 赋予了字符数组一个值,然后调用strchr函数在字符数组中查找第一次与字符变量c匹配的字符,也就是查找最后一个'o' 字符,返回的结果为指向第一个匹配字符的指针。根据返回值输出匹配结果。

(3)然后程序调用strrchr函数在字符数组中查找最后一次与字符变量c匹配的字符,也就是查找最后一个'o' 字符,最后根据返回值输出匹配结果。

(4)在字符数组中有两个'o'字符,因此调用strchr函数应该返回第一个'o'字符的指针,调用strrchr函数应该返回最后一个'o'字符的指针。

(5)对结果进行输出时,如果匹配成功,那么我们输出匹配的字符在数组中的位置,如果匹配不成功,则显示没有找到。

本例程的运行结果是:

The first character r is at position 4

The last character r is at position 7

注意:本例程中,如果字符串中只有一个'o'字符,那么无论调用哪种字符串中字符匹配函数都会返回相同的结果。

C语言课程设计报告 - 字符串处理

课程设计报告 课程设计题目:研究生初试录取 学生姓名:李俊 专业:计算机应用技术 班级: 1140302 指导教师:宋文琳 2012年 06 月 23日

目录 一)实验题目 (3) 二)实验目的 (3) 三)实验要求 (3) 四)实验思路 (4) 五)实验过程 (6) 六)实验调试和结果 (9) 七)实验小结 (13)

实验题目 字符串处理 (1)不使用系统库函数,编写多个函数实现; (2)定义字符数组存放字符串,从键盘输入; (3)调用不同的函数,实现字符串的连接、拷贝、比较、求字符串长度、对字符串内字符进行排序、查找字符串中某个字符是否存在; (4)分别输出以上字符串处理的结果。 二)实验目的 本次课程设计的主要目的是综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体等相关内容的综合应用,使学生能进一步熟悉掌握C语言的基本语法,进一步提升编程能力并逐步培养编程思维,进而不断提高学生解决问题的能力,并为以后的语言学习打下良好的基础。三)实验要求 1. 学生独立完成课程设计的主要内容; 2. 按照实验课表安排进行,不得无故旷课; 3.按照选题规则确定课程设计题目,不可随意更换,但可在完成规定的任务之后,根据 个人兴趣选做其它题目; 4.严格按照报告格式撰写课程设计报告; 5.程序实现方式可以自选,可采用指针、数组或其任意组合方式完成。

四)实验思路1)整体思路

五)实验过程 代码: #include void main() {void lianjie(char a[],char b[]); void kaobei(char a[],char b[]); void bijiao(char a[],char b[]); void qiuchangdu(char a[],char b[]); void paixu(char a[],char b[]); void chazhao(char a[],char b[],char c); char str1[50],str2[40]; char t; int i; printf("需要进行的操作:1.连接;2.拷贝;3.比较;4.求长度;5.排序;6.查找\n"); scanf("%d",&i); if(i==1) {printf("要连接的字符串1:"); scanf("%s",str1); printf("要连接的字符串2:"); scanf("%s",str2); lianjie(str1,str2);} else if(i==2) {printf("拷贝的字符串1:"); scanf("%s",str1); printf("要拷贝的字符串2:"); scanf("%s",str2); kaobei(str1,str2);} else if(i==3)

C字符串处理函数全

strcpy(char destination[], const char source[]); strcpy:将字符串source拷贝到字符串destination中。 strcpy函数应用举例 原型:strcpy(char destination[], const char source[]); 功能:将字符串source拷贝到字符串destination中 例程: #include #include void main(void) { char str1[10] = { "TsinghuaOK"}; char str2[10] = { "Computer"}; cout < #include void main(void) { char str1[10] = { "Tsinghua "}; char str2[10] = { "Computer"}; cout <

C语言函数大全

C语言函数大全 1 字符测试函数 函数(及意义)函数分解Isalnum(){判断字符是否is alphbet(字母表) number(数字) 为字母或数字} Isalpha(){判断是否为英文is alphbet(字母表) 字母} Isblank(){空格和TAB} is blank(空格) Iscntrl() { 控制} is control(控制) Isdigit(){数字} is digit(数字) Isgraph(){除空格外的可打is graph(图表) 印字符} Islower(){是否为小写} is lowercase(小写) Isprintf(){可打印字符含空这个简单 字符} Ispunct(){标点或特殊符号is punctuation(标点) } Isspace(){检查是否为空字is space(空间) 符,即判断是否为空格,水平 定位字符“\t”,归位字符“\r ”,垂直定位字符“\v”,换行 字符“\n”,翻页“\f”} Isupper(){是否为大写字母is upper_case(大写) } Isxdigit(){十六进制} is hexadecimal digit(十六进制) Tolower(){将小写转换成 大写} Toupper(){将大写转换成这个简单(to change 或者to covert 或者 小写} transformation

字符串函数 Memchr(){在某一内存范围内查找一特定字符}Memory (储存)char(字符型炭)也可以是character (字符) Memcmp(){比较区域 str1,str2的前n个字节} Memory(同理)compare(比较) Memcpy(){由str2所指内存区域复 制n个字节到str1所指内存区域} Memory copy(复制) Memmove(){两个所指的内存区域 可重叠,但是内容会更改,函数 返回值为指向区域内存的指针} Memory move(移动) Memset(){把str所指的内存区域 的前N个字节设置成字符c} Set(设置)

C语言字符串的输入和输出

C语言字符串的输入和输出 字符串的输入和输出 %c人为加入\0进行输入输出 %s直接输入输出 *输入输出字符串时字符数组应有足够的存储空间,指针变量作为输入项时,指针必须已经指向确切的、足够大的存储空间 %s的使用 scanf("%s",地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 例:char str[15]; scanf("%s",str); abc123 1.不读入空格和回车,从空格处结束 2.输入字符串长度超过字符数组元素个数,不报错 3.当输入项为字符指针时,指针必须已指向确定的有足够空间的连续 存储单元 4.当为数组元素地址时,从此元素地址开始存放 2.printf("%s",地址值) 输出时遇到第一个'\0'为止 3.gets和puts函数 开头必须stdio.h #include"stdio.h"

1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 4.当为数组元素地址时,从此元素地址开始存放 5.printf("%s",地址值) 输出时遇到第一个'\0'为止 6.gets和puts函数 开头必须stdio.h #include"stdio.h" 1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 7.例: char str[10]; gets(str); 包括空格符 8. 2.puts(字符串起始地址) 遇第一个'\0'结束,自动加入换行符 9.字符串数组:数组中每个元素都是一个存放字符串的数组 可以将一个二维数组看作是字符串数组 10.char ca[3][5]={"A","BB","CCC"}; A\0 B B\0 C C C\0 字符型指针数组 char*pa[3]={"a","bb","ccc"}; pa[0]pa[1]pa[2] 可以重新赋值gets(pa[2]);

C语言中处理字符串的各种自定义函数(精)

C 语言中处理字符串的各种自定义函数 关于 strcpy,strcmp,strcat,strlen 的自定义函数,它是为了避免调用库函数对代码兼容的局限性。要注意如下一些问题: 1. 检查输入的两个指针是否有效; 2. 检查两个字符串是否以 NULL 结尾; 3. 检查目标指针的空间是否大于等于原字符串的空间。 一. strcpy 自定义 char * sef_strcpy(char *str1,char *str2 { If( (NULL==str1||(NULL==str2 { printf(“ invalid argument(s” ; return; } char *strcopy=str1; while(… \0? != *str1++=*str2++ ; *str1=? \0? ; return strcopy;

} 二. strcmp 的自定义 int sef_strcpy(char *str1,char *str2 { If( (NULL==str1||(NULL==str2 { printf(“ 输入参数错误,值为 NULL ! \n” ; return -1; } while(*str1&&*str2&&( *str1++==*str2++ ; return str1-str2; } 三. strcat 的自定义 char * sef_strcat(char *str1,char *str2 { If( (NULL==str1||(NULL==str2 { printf(“ 输入参数错误! ” ;

return; } char *strcopy=str1; while(… \0? !=*str1 {str++;} while(… \0? != (*str1++=*str2++ ; *str1=? \0? ; return strcopy; } 四. strlen 的自定义函数 int sef_strlen(char *str { if(NULL==str { printf(“ 输入参数错误,值为NULL ! ” ; char *p=str; while(… \0? !=*str++ ; return str-p-1;

c语言字符函数和字符串函数及应用

ANSIC标准要求在使用字符串函数时要包含头文件”string.h”,在使用字符函数时要包含头文件”ctype.h”,有的C编译不遵循ANSI C标准的规定,而用其他的名称的头文件。请使用时查有关手册。 C语言中的字符与字 符串函数 (string.h,ctype.h) 函数名 函数和形参类型功能返回值包含文件 isalnum int isalnum(ch) int ch; 检查ch是否 是字母 (alpha)或数 字 (numeric). 是字母或数 字返回1;否 则返回0. ctype.h isalpha int isalpha(ch) int ch; 检查ch是否 是字母. 是,返回1; 否,返回0. ctype.h iscntrl int iscntrl(ch) int ch; 检查ch是否 控制字符(其 ASCII码在0 和0x1F之 间). 是,返回1; 否,返回0. ctype.h isgraph int isgraph(ch) int ch; 检查ch是否 可打印字符 (其ASCII码 在ox21和 ox7E之间), 不包括空格. 是,返回1; 否,返回0. ctype.h islower int islower(ch) int ch; 检查ch是否 小写字母 (a~z). 是,返回1; 否,返回0. ctype.h isprint int isprint(ch) int ch; 检查ch是否 可打印字符 (包括空格), 其ASCII码 在 ox20~ox7E 之间. 是,返回1; 否,返回0. ctype.h ispunct int ispunct(ch) int ch; 检查ch是否 标点字符(不 包括空格), 即除字母,数 字和空格以 是,返回1; 否,返回0. ctype.h

C语言字符串操作总结大全(超详细)

C语言字符串操作总结大全(超详细) 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串 strncmp(p, p1, n) 比较指定长度字符串 strchr(p, c) 在字符串中查找指定字符 strrchr(p, c) 在字符串中反向查找 strstr(p, p1) 查找字符串 strpbrk(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素strspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移 strcspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移 * 具有指定长度的字符串处理函数在已处理的字符串之后填补零结尾符 2)字符串到数值类型的转换 strtod(p, ppend) 从字符串p 中转换double 类型数值,并将后续的字符串指针存储到ppend 指向的char* 类型存储。 strtol(p, ppend, base) 从字符串p 中转换long 类型整型数值,base 显式设置转换的整型进制,设置为0 以根据特定格式判断所用进制,0x, 0X 前缀以解释为十六进制格式整型,0 前缀以解释为八进制格式整型 atoi(p) 字符串转换到int 整型 atof(p) 字符串转换到double 符点数 atol(p) 字符串转换到long 整型 3)字符检查 isalpha() 检查是否为字母字符 isupper() 检查是否为大写字母字符 islower() 检查是否为小写字母字符 isdigit() 检查是否为数字 isxdigit() 检查是否为十六进制数字表示的有效字符 isspace() 检查是否为空格类型字符 iscntrl() 检查是否为控制字符 ispunct() 检查是否为标点符号 isalnum() 检查是否为字母和数字 isprint() 检查是否是可打印字符 isgraph() 检查是否是图形字符,等效于isalnum() | ispunct()

Linux下常用C语言字符串操作函数

Linux下常用C语言字符串操作函数 stroul, strdup snprintf() atio C中常用字符串操作函数 #include size_t strlen(const char *s) 测量字符串长度s的实际长度。 例如s[20]="abc",那么strlen(s)的结果是3,而不是20.这就是实际长度 char *strcat(const char *s1, const *s2) 将字符串s2连接到s1的尾部。从s1的\0开始。 int strcmp(const *s1,const *s2) 比较s1和s2。 s1 = s2的时候返回值=0 s1 < s2的时候返回至<0 s1 > s2的时候返回值>0 char *strchr(const char *s, char c); 返回s中首次出现C的位置的指针。如果s中不存在c则返回NULL char *strrchr(const char *s, char c );返回s中最后一次出现c的位置的指针。如果没有,则返回0 char *strstr(const char *haystack, const char *needle);返回haystack中needle字符串首次出现的位置的指针(不比较结束符NULL)。若果没找到则返回NULL 限定长度的比较,拷贝和追加函数 int strncmp(char *s1, const char *s2, size_t n);(这些都是针对字符串的前n个字符来操作的) char *strncpy(char *dest, const char *src, size_t n); char *strncat(char *dest, const char *src, size_t n); char *strdup(char *s)返回指向被复制的字符串的指针,所需空间由malloc()分配而且需要free释放空间 int atoi(const char *nptr);将字符串转换成整型数

C语言函数大全

功能: 异常终止一个进程 用法: void abort(void) 函数名: abs 功能: 求整数的绝对值 用法: int abs(int i) 函数名: absread, abswirte 功能: 绝对磁盘扇区读、写数据 用法: int absread(int drive, int nsects, int sectno, void *buffer) int abswrite(int drive, int nsects, in tsectno, void *buffer 函数名: access 功能: 确定文件的访问权限 用法: int access(const char *filename, int amode) 函数名: acos 功能:反余弦函数 用法: double acos(double x) 函数名: allocmem 功能: 分配DOS存储段 用法:int allocmem(unsigned size, unsigned *seg) 函数名: arc 功能: 画一弧线 用法:void far arc(int x, int y, int stangle, int endangle, int radius)函数名: asctime 功能: 转换日期和时间为ASCII码 用法:char *asctime(const struct tm *tblock) 函数名: asin 功能:反正弦函数 用法: double asin(double x) 函数名: assert 功能: 测试一个条件并可能使程序终止 用法:void assert(int test) 函数名: atan 功能: 反正切函数 用法: double atan(double x)

c语言中常用的函数和头文件

头文件ctype.h 函数列表<> 函数类别函数用途详细说明 字符测试是否字母和数字isalnum 是否字母isalpha 是否控制字符iscntrl 是否数字isdigit 是否可显示字符(除空格外)isgraph 是否可显示字符(包括空格)isprint 是否既不是空格,又不是字母和数字的可显示字符ispunct 是否空格isspace 是否大写字母isupper 是否16进制数字(0-9,A-F)字符isxdigit 字符大小写转换函数转换为大写字母toupper 转换为小写字母tolower 地区化 本类别的函数用于处理不同国家的语言差异。 头文件local.h 函数列表 函数类别函数用途详细说明 地区控制地区设置setlocale 数字格式约定查询国家的货币、日期、时间等的格式转换localeconv 数学函数 本分类给出了各种数学计算函数,必须提醒的是ANSI C标准中的数据格式并不符合IEEE754标准,一些C语言编译器却遵循IEEE754(例如frinklin C51) 头文件math.h 函数列表 函数类别函数用途详细说明 错误条件处理定义域错误(函数的输入参数值不在规定的范围内) 值域错误(函数的返回值不在规定的范围内) 三角函数反余弦acos 反正弦asin 反正切atan 反正切2 atan2 余弦cos

正弦sin 正切tan 双曲函数双曲余弦cosh 双曲正弦sinh 双曲正切tanh 指数和对数指数函数exp 指数分解函数frexp 乘积指数函数fdexp 自然对数log 以10为底的对数log10 浮点数分解函数modf 幂函数幂函数pow 平方根函数sqrt 整数截断,绝对值和求余数函数求下限接近整数ceil 绝对值fabs 求上限接近整数floor 求余数fmod 本分类函数用于实现在不同底函数之间直接跳转代码。头文件setjmp.h io.h 函数列表 函数类别函数用途详细说明 保存调用环境setjmp 恢复调用环境longjmp 信号处理 该分类函数用于处理那些在程序执行过程中发生例外的情况。 头文件signal.h 函数列表 函数类别函数用途详细说明 指定信号处理函数signal 发送信号raise 可变参数处理 本类函数用于实现诸如printf,scanf等参数数量可变底函数。 头文件stdarg.h 函数列表

C语言库函数手册

C语言库函数手册 分类函数,所在函数库为 ctype.h int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0 int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9') 返回非0值,否则返回0 int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0 int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F) 返回非0值,否则返回0 int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0 int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0 int islower(int ch) 若ch是小写字母('a'-'z')返回非0值,否则返回0 int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值, 否则返回0 int ispunct(int ch) 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0 int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回车符('\r'), 走纸换行('\f'),垂直制表符('\v'),换行符('\n') 返回非0值,否则返回0 int isupper(int ch) 若ch是大写字母('A'-'Z')返回非0值,否则返回0 int isxdigit(int ch) 若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值, 否则返回0 int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母 ('a'-'z') int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母 ('A'-'Z') 数学函数,所在函数库为 math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long labs(long n) 返回长整型参数n的绝对值 double exp(double x) 返回指数函数e^x的值 double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中 double ldexp(double value,int exp); 返回value*2exp的值 double log(double x) 返回ln(x)的值 double log10(double x) 返回log10(x)的值 double pow(double x,double y) 返回x^y的值 double pow10(int p) 返回10^p的值 double sqrt(double x) 返回x的正平方根 double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度

C语言字符串处理的库函数

C语言字符串处理的库函数 使用C语言字符串处理的库函数,务必包含头文件string.h,即#include 1、比较字符串大小函数 ---strcasecmp 忽略大小写---strcasecmp 1)忽略大小写 函数原型:int strcasecmp(const char*s1,const char*s2); 函数说明:用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异 2)忽略大小写—stricmp 函数原型:int stricmp(char*str1,char*str2); 函数说明:以大小写不敏感方式比较两个串 3)不忽略大小写—strcmp 函数原型:int strcmp(char*str1,char*str2); 函数说明:通过比较字串中各个字符的ASCII码,来比较参数Str1和Str2字符串,比较时考虑字符的大小写。 4)比较一部分—strncmpi

函数原型:int strncmpi(char*str1,char*str2,unsigned maxlen); 函数说明:比较字符串str1和str2的前maxlen个字符 ---memcmp 5)内存区域比较 )内存区域比较---memcmp 函数原型:int memcmp(void*buf1,void*buf2,unsigned int count)函数说明:比较内存区域buf1和buf2的前count个字节。Void*是指任何类型的指针。 )内存区域部分比较----memicmp Void*是指任何类型的指针。 6)内存区域部分比较 函数原型:int memicmp(void*buf1,void*buf2,unsigned int count)函数说明:比较内存区域buf1和buf2的前count个字节,但不区分大小写。 以上比较函数的返回值:若参数1中字符串和参数中2字符串相同则返回0; 若参数1中字符串长度大于参数2中字符串长度则返回大于0的值; 若参数1中字符串长度小于参数2中

C语言中最常用标准库函数 - candyliuxj - CSDN博客

C语言中最常用标准库函数- candyliuxj - CSDN博客 C语言中最常用标准库函数收藏 标准头文件包括: <asset.h> <ctype.h> <errno.h> <float.h> <limits.h> <locale.h> <math.h> <setjmp.h> <signal.h> <stdarg.h> <stddef.h> <stdlib.h> <stdio.h> <string.h> <time.h> 一、标准定义(<stddef.h>) 文件<stddef.h>里包含了标准库的一些常用定义,无论我们包含哪个标准头文件,<stddef.h>都会被自动包含进来。 这个文件里定义: l 类型size_t (sizeof运算符的结果类型,是某个无符号整型); l 类型ptrdiff_t(两个指针相减运算的结果类型,是某个有符号整型);

l 类型wchar_t (宽字符类型,是一个整型,其中足以存放本系统所支持的所有本地环境中的 字符集的所有编码值。这里还保证空字符的编码值为0); l 符号常量NULL (空指针值); l 宏offsetor (这是一个带参数的宏,第一个参数应是一个结构类型,第二个参数应是结构 成员名。offsetor(s,m)求出成员m在结构类型t的变量里的偏移量)。 注:其中有些定义也出现在其他头文件里(如NULL)。 二、错误信息(<errno.h>) <errno.h>定义了一个int类型的表达式errno,可以看作一个变量,其初始值为0,一些标准库函数执行中出错时将它设为非0值,但任何标准库函数都设置它为0。 <errno.h>里还定义了两个宏EDOM和ERANGE,都是非0的整数值。数学函数执行中遇到参数错误,就会将errno 置为EDOM,如出现值域错误就会将errno置为ERANGE。 三、输入输出函数(<stdio.h>) 文件打开和关闭: FILE *fopen(const char *filename, const char *mode); int fclose(FILE * stream);

C语言中常见的功能函数

C语言中常见的功能函数(应掌握的编程) 1、两个变量值的交换 void exchang(float *x,float *y) /*形参为两个变量的地铁(指针)*/ {float z; z=*x; *x=*y; *y=z; } void main() {float a,b; scanf(“%f%f”,&a,&b); exchang(&a,&b); /*因为形参是指针,所以实参必须给变量的地址,不能给变量名*/ printf(“a=%f,b=%f”,a,b); } 2、判断一个整数的奇偶 int jou(int n) /*如果是奇数返回1,否则返回0*/ { if(n%2==0) return 0; return 1; } 3、小写字符转换成大写字符 根据实参传给形参的字母,判断是否是小写字母,如果是小写字母,则转换成大写字母,否则不进行转换,函数返回转换后或原来的字符。 本函数仿照toupper()库函数的功能编写(toupper(c) 是将变量c字母转换成大写字母,如果不是小写字母不转换)。 char toupper1(char ch) {if(ch>=’a’&&ch<=’z’) ch-=32; /*小写字母比对应的大写字母ASCII码值大32*/ return ch; } 4、判断一个字符是否是字母(或数字) 根据实参传给形参的字符,判断是否是字母(或数字),如果是字母(或数字)返回1,否则返回0。此函数是根据库函数isalpha()(或isdigit())来编写的。 int isalpha1(char ch) /*判断是否是字母*/ {if(ch>=’A’&&ch<=’Z’||ch>=’a’&&ch<=’z’) return 1; else return 0; } int isdigit1(char ch) /*判断是否是数字字符*/ {if(ch>=’0’&&ch<=’9’) return 1; else return 0; } 5、根据学生成绩,返回其等级 char fun(float cj) {char c; switch((int)cj/10) {case 10:

c语言中的字符数组与字符串

c语言中的字符数组与字符串 一、字符数组的定义 一维字符数组:用于存储和处理1个字符串,其定义格式与一维数值数组一样。char str[20]; 二维字符数组:用于同时存储和处理多个字符串,其定义格式与二维数值数组一样。 char country[10][20]; country[i]:第i个字符串 二.字符数组的初始化 字符数组的初始化. 1.可以通过为每个数组元素指定初值字符来实现。 char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'}; char str[ ]={"I am happy"}; 可以省略花括号,如下所示 char str[ ]="I am happy"; char country[10][20]={“china”,”japanese”,……}; 注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的 char str[15]; str="I am happy"; strcpy(str, "I am happy"); 不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)作为初值。 ‘a’“a”区别 三、字符数组的引用 字符数组的逐个字符引用,与引用数值数组元素类似。 (1)字符数组的输入 除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。 例如: char str[10]; …… for(i=0; i<10; i++) { scanf(\"%c\", &str); fflush(stdin); /*清除键盘输入缓冲区*/ }

C语言C++中的字符串处理函数的头文件

C语言/C++中的字符串处理函数的头文件 下面是大多数的头文件:可以参考.我也是从别的地方找的.哈哈.见笑啦! /******************************/ C、传统C++ #include //设定插入点 #include //字符处理 #include //定义错误码 #include //浮点数处理 #include //文件输入/输出 #include //参数化输入/输出 #include //数据流输入/输出 #include //定义各种数据类型最值常量 #include //定义本地化函数 #include //定义数学函数 #include //定义输入/输出函数 #include //定义杂项函数及内存分配函数 #include //字符串处理 #include //基于数组的输入/输出 #include //定义关于时间的函数 #include //宽字符处理及输入/输出 #include //宽字符分类 /******************************/ 标准C++ (同上的不再注释) #include //STL 通用算法 #include //STL 位集容器 #include #include #include #include #include //复数类 #include #include #include #include #include //STL 双端队列容器 #include //异常处理类 #include #include //STL 定义运算函数(代替运算符) #include #include //STL 线性列表容器

C语言字符串操作函数

strtok()—字符串分割函数 相关函数:index, memchr, rindex, strpbrk, strsep, strspn, strstr 头文件:#include 定义函数:char * strtok(char *s, const char *delim); 函数说明:strtok()用来将字符串分割成一个个片段. 参数s 指向欲分割的字符串, 参数delim 则为分割字符串,当strtok()在参数s 的字符串中发现到参数delim 的分割字符时则会将该字符改为\0 字符. 在第一次调用时,strtok()必需给予参数s 字符串, 往后的调用则将参数s 设置成NULL. 每次调用成功则返回下一个分割后的字符串指针. 返回值:返回下一个分割后的字符串指针, 如果已无从分割则返回NULL. 范例 #include main() { char s[] = "ab-cd : ef;gh :i-jkl;mnop;qrs-tu: vwx-y;z"; char *delim = "-: "; char *p; printf("%s ", strtok(s, delim)); while((p = strtok(NULL, delim))) printf("%s ", p); printf("\n"); } 执行结果: ab cd ef;gh i jkl;mnop;qrs tu vwx y;z //-与:字符已经被\0 字符取代 strstr()—字符串查找函数 相关函数:index, memchr, rindex, strchr, strpbrk, strsep, strspn, strtok 头文件:#include 定义函数:char *strstr(const char *haystack, const char * needle); 函数说明:strstr()会从字符串haystack 中搜寻字符串needle, 并将第一次出现的地址返回. 返回值:返回指定字符串第一次出现的地址, 否则返回0.

C语言字符串函数大全

C语言字符串函数大全 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 函数名: strcat 功 能: 字符串拼接函数 函数名: strcmp 功 能: 串比较 函数名: strchr 功 能: 在一个串中查找给定字符的第一个匹配之处 函数名: strncmpi 功 能: 将一个串中的一部分与另一个串比较, 不管大小写 函数名: strcpy 功 能: 串拷贝 函数名: strcspn 功 能: 在串中查找第一个给定字符集内容的段 函数名: stricmp 功 能: 以大小写不敏感方式比较两个串 函数名: strerror 功 能: 返回指向错误信息字符串的指针 函数名: strcmpi 功 能: 将一个串与另一个比较, 不管大小写 函数名: strncmp 功 能: 串比较 int strncmp(char *str1, char *str2, int maxlen); 函数名: strncmpi 功 能: 把串中的一部分与另一串中的一部分比较, 不管大小写 函数名: strnset 功 能: 将一个串中的所有字符都设为指定字符 函数名: strrchr 功 能: 在串中查找指定字符的最后一个出现 函数名: strrev 功 能: 串倒转 用 法: char *strrev(char *str); 函数名: strspn 功 能: 在串中查找指定字符集的子集的第一次出现 函数名: strtol 功 能: 将串转换为长整数 函数名: strstr 功 能: 在串中查找指定字符串的第一次出现 函数名: strtod 功 能: 将字符串转换为double型值 函数名: strupr 功 能: 将串中的小写字母转换为大写字母 函数名: strtok 功 能: 查找由在第二个串中指定的分界符分隔开的单词 函数名: swab 功 能: 交换字节 -------------------------------------------------------------------------------------------- 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include #include int main(void) { char string[10]; char *str1 = "abcdefghi"; stpcpy(string, str1); printf("%s\n", string); return 0; } --------------------------------------------------------------------------------- 函数名: strcat 功 能: 字符串拼接函数

c语言数字转化字符串的函数及用法

我们常用到的有以下几种: 1、itoa 功能:把一整数转换为字符串 用法:char *itoa(int value, char *string, int radix); 详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写. 参数: value: 待转化的整数。 radix: 是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。 * string: 保存转换后得到的字符串。 返回值: char * : 指向生成的字符串,同*string。 备注:该函数的头文件是"stdlib.h" 2、ltoa 功能:把一长整形转换为字符串 用法:char *ltoa(long value, char *string, int radix); 详细解释:itoa是英文long integer to array(将long int长整型数转化为一个字符串,并将值保存在数组string中)的缩写. 参数: value: 待转化的长整型数。 radix: 是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。 * string: 保存转换后得到的字符串。 返回值: char * : 指向生成的字符串,同*string。 备注:该函数的头文件是"stdlib.h" 3、ultoa

功能:把一无符号长整形转换为字符串 用法:char *ultoa(unsigned long value, char *string, int radix); 详细解释:itoa是英文unsigned long integer to array(将unsigned long int无符号长整型数转化为一个字符串,并将值保存在数组string中)的缩写. 参数: value: 待转化的无符号长整型数。 radix: 是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。 * string: 保存转换后得到的字符串。 返回值: char * : 指向生成的字符串,同*string。 备注:该函数的头文件是"stdlib.h" 4、gcvt 功能:把浮点型数转换为字符串,取四舍五入 用法:char *gcvt(double value, int ndigit, char *buf); 详细解释:gcvt()用来将参数number转换成ASCII码字符串,参数ndigits表示显示的位数。gcvt()与ecvt()和fcvt()不同的地方在于,gcvt()所转换后的字符串包含小数点或正负符号。若转换成功,转换后的字符串会放在参数buf指针所指的空间。 参数: value:待转化的浮点数。 ndigit:存储的有效数字位数。 *buf:结果的存储位置。 返回值: char * :指向生成的字符串,同*buf。 备注:该函数的头文件是"stdlib.h" 5、ecvt 功能:将双精度浮点型数转换为字符串,转换结果中不包括十进制小数点

相关主题
文本预览
相关文档 最新文档