字符函数和字符串函数

1.函数介绍

1.1strlen

1.字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。
2.参数指向的字符串必须要以 ‘\0’ 结束。
注意函数的返回值为size_t,是无符号的( 易错 )
3.学会strlen函数的模拟实现
size_t strlen ( const char * str );

#include <stdio.h>
int main()
{
 const char*str1 = "abcdef";
 const char*str2 = "bbb";
 if(strlen(str2)-strlen(str1)>0)
 {
 printf("str2>str1\n");
 } 
 else
 {
 printf("srt1>str2\n");
 }
 return 0; }

2.2strcpy

char * strcpy(char * destinnation, const  char* source)

1.源字符串必须以 ‘\0’ 结束。
2.会将源字符串中的 ‘\0’ 拷贝到目标空间。
3.目标空间必须足够大,以确保能存放源字符串。
4.目标空间必须可变。
5.学会模拟实现。

2.3 stract

char * strcpy(char * destination,const char* source)

源字符串必须以 ‘\0’ 结束。
目标空间必须有足够的大,能容纳下源字符串的内容。
目标空间必须可修改。

2.4 strncpy

char * strncpy(char* destnation,const char* source,size_t num);

1.拷贝num个字符从源字符串到目标空间
2.如果源字符的长度小于num,则拷贝完源字符串之后,在目标后面追加00,直到num个

2.5 strncmp

int strncmp(const char* str1,const char* str2,size, size_num);

比较到出现另一个字符不已昂或者字符串结束或者num个字符全部比较完

/* strncmp example */
#include <stdio.h>
#include <string.h>
int main ()
{
  char str[][5] = { "R2D2" , "C3PO" , "R2A6" };
  int n;
  puts ("Looking for R2 astromech droids...");
  for (n=0 ; n<3 ; n++)
  if (strncmp (str[n],"R2xx",2) == 0)
 {
    printf ("found %s\n",str[n]);
 }
  return 0; }

2.6 strstr

char *strstr(const char*,const char *);
/* strstr example */
#include <stdio.h>
#include <string.h>
int main ()
{
  char str[] ="This is a simple string";
  char * pch;
  pch = strstr (str,"simple");
  strncpy (pch,"sample",6);
  puts (str);
  return 0;
} 

2.7 strerror

char *strerror(int errnum);

返回错误码,所对应的错误信息

/* strerror example : error list */ 
#include <stdio.h> 
#include <string.h> 
#include <errno.h>//必须包含的头文件
int main () 
{ 
 FILE * pFile; 
 pFile = fopen ("unexist.ent","r"); 
 if (pFile == NULL) 
 printf ("Error opening file unexist.ent: %s\n",strerror(errno)); 
 //errno: Last error number 
 return 0; 
} 
Edit & Run

2.8 memcpy

void * memcpy(void*  destination ,const void * source,size_t num)

函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
这个函数在遇到 ‘\0’ 的时候并不会停下来。
如果source和destination有任何的重叠,复制的结果都是未定义的

/* memcpy example */ 
#include <stdio.h> 
#include <string.h> 
struct { 
 char name[40]; 
 int age; 
} person, person_copy; 
int main () 
{ 
 char myname[] = "Pierre de Fermat"; 
 /* using memcpy to copy string: */ 
 memcpy ( person.name, myname, strlen(myname)+1 ); 
 person.age = 46; 
 /* using memcpy to copy structure: */ 
 memcpy ( &person_copy, &person, sizeof(person) ); 
 printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age ); 
 return 0; 
} 

memmove

void *memove( void* destination,const void* source,size_y num);

和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
如果源空间和目标空间出现重叠,就得使用memmove函数处理。

/* memmove example */ 
#include <stdio.h> 
#include <string.h> 
int main () 
{ 
 char str[] = "memmove can be very useful......"; 
 memmove (str+20,str+15,11); 
 puts (str); 
 return 0; 
}

2.字符分类函数

iscuntr:任何控制字符
isspace:空白字符
isdigit:十进制0-9
isxdigit:十六进制
islower:小写字母
isupper:大写字母
isalpha:字母a-z 或 A-Z
iaslnum:字母或数字
ispunct:标点符号
isgraph:任何图形字符
isprint:任何可打印字符,包括图形字符和空白字符

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值