1,<assert.h>   assert()  {在传参时要养成使用assert的习惯,可以帮助我们找到程序bug}

    作用:断言,判断指针是否为空,检查参数是否满足要求,以免引起程序崩溃

    例:assert(arr!=NULL)     assert(light<eight)

2,三步反转法

  左旋n个数:将“abcdefghi”的前n个元素放到最后->cdefghiab

  第一步:分成两部分  前n项   ab      剩余的 cdefghi

  第二步:将两部分分别逆序   ba   ihgfedc

  第三步:将所有元素逆序   cdefghiab

3,<string.h>  strcat()   char *strcat( char *strDestination, const char *strSource );

作用:字符串后面追加一个字符串

例:char arr1[]="abc"

char arr2[]="hij"

strcat(arr1,arr2)-->arr1[]="abchij"

原理:a b c \0       h i j \0

先找到arr1的\0,再将arr2的首元素替换arr1的\0,然后依次放入,直到\0  {注:arr1的空间要足够大,否则会非法访问空间)

注意:arr1{strcat(arr1,arr1)}不能追加自身,因为覆盖\0的同时没有了结束标志,会一直追加下去,是系统奔溃     

4,  <string.h>  strncat()    char *strncat( char *strDest, const char *strSource, size_t count );    

   和strcat相似,但规定了传arr2的长度,如果提前遇到\0依旧会停止

   char arr1[20] = { "abcd" };

   char arr2[] = "ef\0gh";

   strncat(arr1, arr2, 4);----->arr1[20]="abcdef";

5,<string.h>   strstr()     char *strstr( const char *string, const char *strCharSet );


  作用:查找子串,arr1中是否有arr2

  找到了返回arr1中arr2首元素字符的地址

  未找到返回NULL

6,  求长度         strlen      size_t( const char *string );

    复制字符串   strcpy     char*( char *strDestination, const char *strSource );

                       strncpy   char*( const char *string1, const char *string2, size_t count );  

                       注意:如果count大于scr的长度,多余的部分自动补0

     追加字符串   strcat      char*( char *strDestination, const char *strSource );

                        strncat   char*( char *strDest, const char *strSource, size_t count );

                        注意:如果count大于scr的长度,追加完后不在继续

                                  如果count小于scr的长度,追加完后自动补0

    找子字符串    strstr   ​  char*( const char *string, const char *strCharSet );

    字符串比较    strcmp   int ( const char *string1, const char *string2 );//比较字符的ASCII码值