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:字符集逆匹配函数... 11

14.      strdup:字符串新建拷贝函数... 12

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

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

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

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

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

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<stdlib.h>

是否是标准函数:是

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

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

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

#include <stdio.h>

#include <stdlib.h>

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<stdlib.h>

是否是标准函数:是

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

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

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

#include <stdio.h>

#include <stdlib.h>

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<stdlib.h>

是否是标准函数:是

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

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

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

#include <stdio.h>

#include <stdlib.h>

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<string.h>

是否是标准函数:是

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

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

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

#include <string.h>

#include <stdio.h>

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<string.h>

是否是标准函数:是

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

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

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

#include <stdio.h>

#include <string.h>

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将这两个字符串按照不同的字符个数进行比较,将返回的比较结果复制给变量s1s2

3)显示比较结果。

本例程的运行结果为:

The comparison of 6 character

ABCDEF<ABCDEf

The comparison of 5 character

ABCDEF=ABCDEf

注意:

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

 

 

 

6.       memcpy:字符串拷贝函数

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

头文件:#include<string.h>

是否是标准函数:是

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

返回值:destin

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

#include <stdio.h>

#include <string.h>

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)首先定义两个字符串sd,并赋初值,且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

注意:

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

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

#include <string.h>

#include <stdio.h>

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时,复制的字符串在dp之间又重叠,因此该复制行为是不可预知的,结果也自然难以保证。这段程序的运行结果为:

1234567890

1231231230

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

 

 

7.       memmove:字块移动函数

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

头文件:#include<string.h>

是否是标准函数:是

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

返回值:destin

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

#include <stdio.h>

#include <string.h>

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)首先定义两个字符串sd,并赋初值,且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 <string.h>

#include <stdio.h>

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;

}

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

1234567890

1231234560

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

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

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

 

 

 

8.    memset:字符加载函数

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

头文件:#include<string.h>

是否是标准函数:是

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

返回值:s的值

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

#include <string.h>

#include <stdio.h>

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<string.h>

是否是标准函数:是

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

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

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

#include <string.h>

#include <stdio.h>

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<string.h>

是否是标准函数:是

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

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

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

#include <stdio.h>

#include <string.h>

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<string.h>

是否是标准函数:是

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

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

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

#include <string.h>

#include <stdio.h>

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<string.h>

是否是标准函数:是

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

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

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

#include <stdio.h>

#include <string.h>

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

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

 

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

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

头文件:#include<string.h>

是否是标准函数:是

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

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

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

#include <string.h>

#include <stdio.h>

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

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

 

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

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

头文件:#include<stdlib.h>

是否是标准函数:是

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

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

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

#include <stdio.h>

#include <string.h>

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<string.h>

是否是标准函数:是

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

返回值:返回错误信息

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

#include <stdio.h>

#include <errno.h>

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<string.h>

是否是标准函数:是

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

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

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

#include <stdio.h>

#include <string.h>

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)最后将字符串或字符数组的长度值输出。

本例程的运行结果是:

0

5

5

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

 

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

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

头文件:#include<string.h>

是否是标准函数:否

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

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

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

#include <stdio.h>

#include <string.h>

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<string.h>

是否是标准函数:是

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

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

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

#include <string.h>

#include <string.h>

#include <stdio.h>

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<string.h>

是否是标准函数:是

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

返回值:若字符串str1n个字符组成的子串大于字符串str2n个字符组成的子串返回结果大于零,若字符串str1n个字符组成的子串小于字符串str2n个字符组成的子串返回结果小于零,若字符串str1n个字符组成的子串等于字符串str2n个字符组成的子串返回结果等于零

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

#include <string.h>

#include <string.h>

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<string.h>

是否是标准函数:是

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

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

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

#include <stdio.h>

#include <string.h>

 

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<string.h>

是否是标准函数:是

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

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

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

#include <stdio.h>

#include <string.h>

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<string.h>

是否是标准函数:是

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

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

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

#include <stdio.h>

#include <string.h>

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'字符,那么无论调用哪种字符串中字符匹配函数都会返回相同的结果。

 

23.  strrev:字符串倒转函数

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

头文件:#include<string.h>

是否是标准函数:否

函数功能:将字符串进行倒转,也就是将字符串str中的第一个字符与最后一个字符交换,第二个字符与倒数第二个字符交换,以此类推。

返回值:返回倒转后字符串的指针

例程如下:应用strrev将字符串倒转

#include <stdio.h>

#include <string.h>

int main(void)

{

    char *str = "Able was I ere I saw Elba";

    printf("Before: %s\n",str);

    strrev(str);

    printf("After: %s\n",str);

    getch();

    return 0;

}

例程说明:

1)首先,程序声明了一个字符数组并赋予初值,应该注意到字符数组的初值很有意思,类似于回文。

2)程序通过调用strrev将原字符串中的所有内容倒转,第一个字符与最后一个字符交换,第二个字符与倒数第二个字符交换,以此类推。

3)最后将倒转前后字符串的值打印出来。

本例程的运行结果是:

Able was I ere I saw Elba

ablE was I ere I saw elbA

注意:本例程中,字符数组中的初值并不是严格意义上的回文,将它倒转后会发现与原字符串并不是完全一样。

 

24.  strset:字符串设定函数

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

头文件:#include<string.h>

是否是标准函数:否

函数功能:将字符串原有字符全部设定为指定字符,也就是将字符串str中的所有字符全部用字符c进行替换.

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

例程如下:应用strset将字符串设定为指定字符

#include <stdio.h>

#include <string.h>

int main(void)

{

   char str[11]="0123456789";

   char symbol='a';

   printf("Before: %s\n",str);

   strset(str,symbol);

   printf("After: %s\n",str);

   getch();

   return 0;

}

例程说明:

1)首先,程序声明了一个字符数组和一个字符变量并赋予初值,字符变量代表用于替换的字符。

2)程序通过调用strset将原字符串中的所有内容用字符'a'替换,相当于覆盖了原值并重新设定了字符串的值。

3)最后将设定前后字符串的值打印出来。

本例程的运行结果是:

0123456789

aaaaaaaaaa

注意:本例程中,字符数组中指存储了十个字符,但是下表确是十一,利用字符串的相关知识可以理解该问题,有兴趣的读者可以将下表改成十或在字符串赋值的时候多加一个字符,看看程序会输出什么。

 

25.  strspn:字符集匹配函数

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

头文件:#include<string.h>

是否是标准函数:是

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

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

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

#include <string.h>

#include <stdio.h>

Int main(void)

{

    char *str1="cabbage",*str2="potato";

    char *str= "abc";

    int  result;

    result = strspn(str1,str);

    if(result)

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

    else

        printf("No character is congruent");

    result = strspn(str2,str);

    if(result)

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

    else

        printf("No character is congruent");

    getch();

    return 0;

}

例程说明:

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

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

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

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

本例程的运行结果是:

The first 5 is congruent

No character is congruent

注意:本例程中,进行字符集匹配时,待匹配的字符串中的字符只要是字符集中的任意字符就匹配成功,要明确区分其余字符串匹配的不同。

 

26.  strstr:字符串匹配函数

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

头文件:#include<string.h>

是否是标准函数:是

函数功能:在字符串中查找另一个字符串首次出现的位置,也就是在字符串str1中查找第一次出现字符串str2的位置。

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

例程如下:应用strstr匹配字符串

#include <stdio.h>

#include <string.h>

int main(void)

{

    char *str1 = "Borland International",*str2 = "nation";

    char *result;

    result=strstr(str1, str2);

    if(result)

        printf("The substring is: %s\n", ptr);

    else

        printf("Not found the substring");

    getch();

    return 0;

}

例程说明:

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

2)程序通过调用strstr进行字符串匹配,查找字符串str1中首次出现字符串str2的位置,返回匹配结果。

3)输出匹配结果时以匹配字符串的首字符作为子串的第一个字符输出,如果匹配不成功显示没有找到。

本例程的运行结果是:

The substring is national

注意:本例程中,匹配成功时的返回结果并不是进行匹配的字符串,而是第一次匹配成功的字符串首字符的指针。

 

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

函数原型:double strtod(char *str, char **endptr);

头文件:#include<stdlib.h>

是否是标准函数:是

函数功能:将字符串转换非双精度值,也就是将字符串str转换为双精度值,其中进行转换字符串必须是双精度数的字符表示格式,如果字符串中有非法的非数字字符,则第二个参数将负责获取该非法字符,即字符串指针endptr用于进行错误检测,转换在此非法字符处停止进行。

返回值:返回转换后的双精度结果

例程如下:应用strtod将字符串转换为双精度值

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int main(void)

{

    char str[20], *endptr;

    double result;

    while(1)

    {

        printf("Input a float:");

        gets(str);

        result=strtod(str,&endptr);

        if(result==-1)

            printf("The number is %lf\n",str,result);

        else

            break;

    }

    getch();

    return 0;

}

例程说明:

1)首先,程序声明了一个用于转换的字符数组和一个用于进行错误检测的字符串指针,双精度result用于获取转换结果。

2)程序通过循环不断接收从标准输入流中输入的字符串,并通过调用strtod将输入的字符串转换为双精度值,通过返回值获取转换结果,并通过第二个参数进行错误检测。循环的最后将转换结果打印出来。

3)程序规定将字符串"-1"作为循环结束的标志,除非通过输入结束标志,否则循环条件总是成立的。

4)如果输入一个正确的双精度字符串,程序会正确的转换并补齐尾数;如果输入整数,程序会自动将其转换成双精度数;如果小数点后面的位数过长,超过了双精度的范围,程序会采取截断的方式;如果输入期间出现了非法字符,程序停止转换并保留已转换的结果;如果第一个就是非法字符则返回零。

本例程的运行结果是:

Input a float: 4.2

The number is 4.20000

Input a float: 79

The number is 79.00000

Input a float: 1.1111111111

The number is 1.111111

Input a float: 34.45abc

The number is 34.450000

Input a float:abc

The number is 0.000000

Input a float: -1

注意:本例程中,即便转换出现非法字符循环也不会停止,而只是通过第二个参数捕捉到了非法字符,可以编写程序对非法字符进行处理,本例中并没有这样做,循环只是以输入循环结束标志循环结束依据。

 

28.  strtok:字符串分隔函数

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

头文件:#include<string.h>

是否是标准函数:是

函数功能:在字符串中查找单词,这个单词始有第二个字符串中定义的分隔符分开,也就是在字符串str1中查找由字符串str2定义的分隔符,以分隔符为界,分隔出来的分隔符前面的所有字符组成一个单词,分离出第一个单词后将第一个参数置为空,可以继续分隔第二个单词。

返回值:返回分隔出的单词的指针

例程如下:应用strtok分隔字符串

#include <stdio.h>

#include <string.h>

int main(void)

{

    char *str1="I am very\thappy,to,stduy\nC\nprogramme";

    char *str2=" ,\t\n";

    char *token;

    printf("%s\n\nTokens:\n",str1);

    token = strtok(str1,str2);

    while( token != NULL )

    {

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

        token = strtok(NULL,str2);

    }

    getch();

    return 0;

}

例程说明:

1)首先,程序声明了三个字符串变量并给前两个变量赋予初值,其中第二个字符串是用于分隔的分隔符集,最后一个token用于记录分隔出来的单词,应该注意到第一个字符串中有许多分隔符。

2)为了突出分隔结果,我们首先将字符串str1打印出来,它是按照标准输出的格式进行输出。

3)程序通过调用strtok进行字符串分隔,查找字符串str1中首次出现字符串str2任意分隔符的位置,然后将分隔符之前的所有字符组成一个单词返回给token变量,从而得到分隔出来的首个单词。

4)在循环体中,我们每次循环都要将上一次分隔出来的单词打印出来,另外就像前面所说,将strtok函数第一个参数置为空可以达到继续进行分隔的目的,也就是在上一次分隔出来的单词之后继续进行分隔,直到所有单词都分隔完毕,token变量会得到空的返回值,我们结束循环。

5)打印分隔结果时,以换行区分每次分隔出的单词。

本例程的运行结果是:

I am very          happy,to,study

C

Programme

 

Token:

I

am

very

happy

to

study

C

Programme

注意:本例程中,一定要记住如果在第一次分隔出单词后想继续进行分隔操作,务必要将函数的第一个参数置为空。

 

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

函数原型:long strtol(char *str, char **endptr, int base);

头文件:#include<stdlib.h>

是否是标准函数:是

函数功能:将字符串转换为长整型值,也就是将字符串str转换为长整型值,其中进行转换字符串必须是长整型的字符表示格式,如果字符串中有非法的非数字字符,则第二个参数将负责获取该非法字符,即字符串指针endptr用于进行错误检测,转换在此非法字符处停止进行。

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

例程如下:应用strtol将字符串转换为长整型

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int main(void)

{

    char str[20], *endptr;

    long result;

    while(1)

    {

        printf("Input a long:");

        gets(str);

        result=strtod(str,&endptr);

        if(result!=-1)

            printf("The number is %ld\n",result);

        else

            break;

    }

    getch();

    return 0;

}

例程说明:

1)首先,程序声明了一个用于转换的字符数组和一个用于进行错误检测的字符串指针,长整型result用于获取转换结果。

2)程序通过循环不断接收从标准输入流中输入的字符串,并通过调用strtol将输入的字符串转换为长整型值,通过返回值获取转换结果,并通过第二个参数进行错误检测。循环的最后将转换结果打印出来。

3)程序规定将字符串"-1"作为循环结束的标志,除非通过输入结束标志,否则循环条件总是成立的。

4)如果输入一个正确的长整型字符串,程序会正确转换;如果输入小数,程序会将小数点后面的截断;如果转换的数过大,超过了长整型范围,程序返回长整型所能接受的最大值;如果输入期间出现了非法字符,程序停止转换并保留已转换的结果;如果第一个就是非法字符则返回零。

本例程的运行结果是:

Input a long: -15

The number is -15

Input a long: 1234.5678

The number is 1234

Input a long: 333333333333

The number is 2147483647

Input a long: -34abc

The number is -34

Input a long: abc

The number is 0

Input a float: -1

注意:本例程中,将字符串中的小数转换为长整型时,程序会将小数点看作非法字符,从而停止转换继续进行,因此无论小数点后面的数是多少都会截断,而不是我们习惯上的四舍五入或者五舍六入。

 

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

函数原型:unsigned long strtoul(char *str, char **endptr, int base);

头文件:#include<stdlib.h>

是否是标准函数:是

函数功能:将字符串转换为无符号长整型值,也就是将字符串str转换为无符号长整型值,其中进行转换字符串必须是无符号长整型的字符表示格式,如果字符串中有非法的非数字字符,则第二个参数将负责获取该非法字符,即字符串指针endptr用于进行错误检测,转换在此非法字符处停止进行。

返回值:返回转换后的无符号长整型结果

例程如下:应用strtoul将字符串转换为无符号长整型

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int main(void)

{

    char str[20], *endptr;

    unsigned long result;

    while(1)

    {

        printf("Input an unsigned long:");

        gets(str);

        result=strtoud(str,&endptr);

        if(result!=-1)

            printf("The number is %lu\n",result);

        else

            break;

    }

    getch();

    return 0;

}

例程说明:

1)首先,程序声明了一个用于转换的字符数组和一个用于进行错误检测的字符串指针,无符号长整型result用于获取转换结果。

2)程序通过循环不断接收从标准输入流中输入的字符串,并通过调用strtoul将输入的字符串转换为无符号长整型值,通过返回值获取转换结果,并通过第二个参数进行错误检测。循环的最后将转换结果打印出来。

3)程序规定将字符串"1"作为循环结束的标志,除非通过输入结束标志,否则循环条件总是成立的。

4)如果输入一个正确的长整型字符串,程序会正确转换;如果输入一个负数,程序返回零。

本例程的运行结果是:

Input a long: 100

The number is 100

Input a long: -36

The number is 0

Input a float: 1

注意:本例程中,输入负数的时候程序会将负号看作非法字符,从而停止转换继续进行,没有发生任何实际的转换。

 

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

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

头文件:#include<string.h>

是否是标准函数:否

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

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

例程如下:应用strupr将字符串转换成大写字符

#include <stdio.h>

#include <string.h>

int main(void)

{

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

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

    getch();

    return 0;

}

例程说明:

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

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

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

本例程的运行结果是:

YOU’LL NEVER WALK ALONE

 

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

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

头文件:#include<string.h>

是否是标准函数:否

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

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

例程如下:应用strupr将字符串转换成大写字符

#include <stdio.h>

#include <string.h>

int main(void)

{

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

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

    getch();

    return 0;

}

例程说明:

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

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

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

本例程的运行结果是:

YOU’LL NEVER WALK ALONE

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值