上海龙凤419

C说话

C说话字符串操纵函数及常常利用的完成

时候:2024-10-10 09:41:04 C说话 我要投稿
  • 相干保举

C说话字符串操纵函数及常常利用的完成

  口试官很喜好让求职者写一些常常利用库函数的完成,有良多是和字符串相干的,有一些是对于内存拷贝的。普通,常会让写的函数有以下几个:

  strcpy , strncpy, memcpy。

  memset普通不会让去写,但这个函数也很有特色,有良多轻易用错的处所。一并总结吧。

字符串操纵函数

 
atof() 将字符串转换成浮点数
atoi() 将字符串转换成整数
atol() 将字符串转换生长整型数
gcvt() 将浮点型数转换为字符串(四舍五入)
strtod() 将字符串转换成浮点数
strtol() 将字符串转换生长整型数
strtoul() 将字符串转换成无标记长整型数
toascii() 将整数转换成正当的ASCII码字符
tolower() 将大写字母转换为小写字母
toupper() 将小写字母转换为大写字母
index() 查找字符串并前往初次呈现的地位
rindex() 查找字符串并前往最初一次呈现的地位
strcasecmp() 判定字符串是不是相称(疏忽巨细写)
strcat() 毗连字符串
strcmp() 按照ASCII码比拟字符串
strcoll() 按照情况变量LC_COLLATE来比拟字符串
strcpy() 复制字符串
strcspn() 查找字符串并前往初次呈现的地位
strchr() 查找字符串并前往初次呈现该字符的地点
strdup() 复制字符串
strlen() 前往字符串长度
strncasecmp() 比拟字符串的前n个字符
strncat() 拼接字符串(取前n个字符)
strncpy() 复制字符串(取前n个字符)
strpbrk() 定位字符串中第一个呈现的指定字符
strrchr() 定位字符串中最初呈现的指定字符
strspn() 前往从字符串开首持续包罗特定字符的字符数量
strstr() 前往指定字符串第一次呈现的地点
strtok() 字符串朋分
 

  1. strcpy

  strcpy函数的原型是:

  char * strcpy(char* dest, const char* src)

  strcpy的完成常常要注重的细节是:

  (1)判定地点是不是为空,小我感受可以或许利用断言

  (2)参数只要两个地点,不拷贝的长度。拷贝到'\0‘时就会停止,要保障终究dest开端是'\0'。

  (3)要保障方针字串的长度充足,可以或许包容原串的长度。

  (4)由于拷贝是dest会挪动,而终究要前往的是拷贝后字符串的肇端地点,是以要先保管dest的地点,便于终究前往。

  在完成这一点时,有两种体例。 char* temp=dest; 拷贝时挪动dest前往temp,或拷贝时挪动temp前往dest,不晓得哪一个是对的。感受两个都是不题目标

  此中一种完成体例:

  [cpp] view plaincopychar* mystrcpy(char* dest,const char* src)

  {

  assert(dest!=NULL && src!=NULL);

  char* temp=dest;

  while((*temp++ = *src++ )!='\0')

  {}

  return dest;

  }

  2. strncpy

  strncpy的功效和strcpy近似,只是它复制时多了一个停止前提。便是未碰到原串的'\0’,若是已复制了n个字符(n为供给的参数长度),复制一样会停止。

  strcpy的完成要注重的细节也根基合用于strncpy的完成。

  完成体例:

  [cpp] view plaincopychar* mystrncpy(char* dest, const char* src, int len)

  {

  assert(dest!=NULL && src!=NULL);

  char* temp=dest;

  int i=0;

  while(i++ < len && (*temp++ = *src++)!='\0')

  {}

  if(*(--temp)!='\0')

  *temp='\0';

  return dest;

  }

  [cpp] view plaincopy注重:刚起头我写strncpy的完成时,把while(i++ < len && (*temp++ = *src++)!='\0')写成了while( (*temp++ = *src++)!='\0' && i++ < len); 致使最初多复制了一个字符,大白为甚么吧。。

  3. memcpy

  memcpy和strncpy有些近似,但也有实质的差别。

  (1)strncpy只能复制字符串,但memcpy对范例不请求。

  (2)strncpy有两个停止前提,memcpy只要一个停止前提,那便是复制n个字节。(n是memcpy的第三个参数)

  (3)要出格注重目标地点和源地点重合的题目,拷贝前要加以判定。

  (4)完成这个函数时普通要把本来的指针范例转换成char*,如许每次挪动都是一个字节。

  完成体例:(斟酌了两个地点空间是不是会有堆叠)

  [cpp] view plaincopyvoid* mymemcpy(void* dest, void* src, int len)

  {

  int i=0;

  char* tempdest=(char*)dest;

  char* tempsrc=(char*)src;

  if(tempdest(tempsrc+len-1))

  {

  while(i

  {

  *tempdest++ = *tempsrc++;

  i++;

  }

  }

  else

  {

  tempdest+=len;

  tempsrc+=len;

  i=len;

  while(i>0)

  {

  *tempdest-- = *tempsrc--;

  i--;

  }

  }

  return dest;

  }

  注重,memcpy是对内存的拷贝,对其余宁静性不做斟酌。用户在利用这个函数时要谨慎,比方用它来拷贝字符串(固然若是是字符串拷贝必定是用strncpy)就要注重开端的\0字符之类的。

  4. memset

  memset函数的原型是:

  void *memset(void *s, int ch, size_t n)

  感化是把s所指向的地点起头的n个字节的内容全数置位ch所指定的ASCII值。

  普通常常常利用memset对某段内存空间置零。

  常常会呈现的一个题目:在C++中,为甚么不倡导在机关函数中利用:memset(this,0,sizeof(*this))

  缘由: 在C++中,若是类中都是根基范例的数据成员并且不虚函数和虚担当的话,利用memset如许用到不太多影响。

  若是有虚函数,memset会把虚表指针等全数置零,对类会发生粉碎。

【C说话字符串操纵函数及常常利用的完成】相干文章:

C说话中前往字符串函数的完成体例09-19

C说话之字符串处置函数08-31

8种C说话根基常常利用的字符串处置函数05-30

php的字符串常常利用函数06-15

C说话法式的完成09-27

C说话的底层操纵08-23

C说话字符串常识点07-27

c说话数学函数的先容10-20

C说话函数递归教程09-25

C说话函数的递归挪用08-26