挖坟字符串知识点

原创 2016年05月30日 13:35:28

    不要怀疑,博主这次真的是在挖坟,今天整理笔记的时候才看见,所以呢,就上来备份一下,这篇呢主要是说一些关于字符串函数的知识点,希望大家以后在使用的时候注意一下!

一、字符串基本知识
1.字符串:顾名思义,字符串即一串字符的组合,并且以NUL结尾,所以我们不能让'\0'出现在字符串还           没有结束的地方。
2.NUL:它本身并不是字符串的一部分而是一个我们用来判断一个字符串结束与否的标识!
3.字符串的分类:常量字符串,字符串数组。

  • 常量字符串

          一般来说我们使用常量字符串来保存那些不需要被修改的字符串

  • 字符串数组

          存放在数组里的字符串我们可以对其进行增删和替换
注意:若我们要使用字符串函数必须引头文件string.h
二、串操作函数
1、字符串的长度度量标尺:strlen
   函数原型:size_t strlen(char const *string)
   size_t是一个无符号整数类型 所以我们不可以用两个strlen 的结果减法运算来判断哪个字符串长。
   典型错误:if((strlen(str1)-strlen(str2)) >= 0)  该表达式的结果将永远为真
**表达里面如果同时包含有符号和无符号数结果会变得不一样
使用减法必须强类型转换

int main ( )
{
           char  *arr = "ABCD";
           int ret1 = strlen( arr );
           int ret2 = strlen( arr ) - 10 ;
           printf( "%d    %d\n" , ret1, ret2 );
           system( "pause" );
           return 0 ;
}

结果: 4    -6

2.容易失控的不受长度限制串操作函数

  • 字符串拷贝函数strcpy

    由于字符串拷贝函数不能检测字符串的长度,你给它多少个字符它就拷贝多少个字符,但在程序执行时,多出来的字符会按顺序存放在内存空间中,这样是十分不安全的,你有可能覆盖掉了内存中其他重要的信息。
    当原串和目标串出现内存重叠的时候我们应该考虑原串里面的内容会被覆盖并丢失,此时我们应该选择内存拷贝函数memmove来解决这个难题
如果新的字符串短于原字符串那么原字符串里结尾的几个字符也无法显示,因为在拷贝时它将字符串里的‘\0’也一起拷贝过来,导致原串中最后几个字符落在NUL的后面!

  • 字符连接函数strcat

    strcat函数同样不受到长度的限制,我们在将一个字符连接到另一个字符串后面的时候选择strcat函数,在我们使用时同样要给目标字符串预留出足够的空间来容纳我们的源串,并且保证它们不会发生内存的重叠。
    如果你需要连接的字符串的长度加上目标字符串的长度超过了目标串的总长则会发生段错误!
    不能自己连接自己!

  • 字符串的比较函数strcmp

    字符串的比较函数strcmp的原理是将字符串里的每一个对应字符进行比较,直到找到第一个不相等的字符比较他们的ASCII码值后给出结论!
被比较的两个字符串可以长度不同,如果前面的字符都相同,那么短的那个字符串更小!
    有一个常见的问题,许多的初学者总是将判断条件写成if(strcmp(str1,str2))这种写法是绝对要避免的,因为该函数的返回值为0时,结果为真(str1=str2),正好和我们平时的逻辑相反!
以上叙述的三个函数都是不受字符串的长度限制,在使用时一定要注意不要忽略可用的字符串的长度(避免字符串数组的越界访问造成的内存覆盖丢失等)

3.长受限的串操作函数

  • strncp(char *dest,const char *src,int n)

    该函数在复制时根据传参时规定的长度复制字符串,如果src的长度小于n那么数组将在未填充部分自动填充NUL来补全,但如果src的长度大于n那么src只会有n个字符被复制,并且该字符串不会以NUL结尾

  • strncat(char *dest,const char *src,int n)

    该函数在连接时,如果连接之后字符串总长大于dest能容纳的最大长度src函数不会停止而是将后面的连接上去,并且在连接完最后个字符之后添加上NUL

  • strncmp

    以上三个函数的功能和我们刚刚介绍过的strcpy,strcat,strcmp的功能主要的差别就是在长度的控制上

3.字符串查找函数

  • 查找一个字符

    我们常常使用strchrstrrchr来查找字符串里某个字符的位置
    strchr找到该字符第一次出现在该串中的位置,并返回指向它的指针。
    strrchr找到该字符最后一次出现在该串中的位置,并返回指向它的指针。

  • 查找任意几个字符

    strpbrk(char const *str,char const *group);
    值得注意的是:如果输入了一个任意几个字符其中第一个字符存在于字符串里,但是后面的不存在它仍然会给你返回指向第一个字符的位置的指针~
    返回原串中第一次出现的目标串的任意字符的地址
    匹配任何一个字符

int main ( )
{
           char  *arr = "ABCD";
           char *ret = strpbrk( arr,"BF" );
           printf( "%c\n" , *ret );
           system( "pause" );
           return 0 ;
}
  • 查找子串strstr(const char *str,const char *str2)

    库函数里并没有像strrstr这样的函数,但我们可以自己实现它!该函数也是用于在字符串里查找子串不和上面函数不一样的是如果子串没有完整的出现在原串里它将返回NULL
拓展:实现strrstr 出现一次截断一次

int main ( )
{
           char  *arr = "ABCD";
           char *ret = strstr( arr,"BF" );
           printf( "%c\n" , *ret );
           system( "pause" );
           return 0 ;
}

4.高级查找字符串

  • 查找一个字符串前缀

    strspn(const char *str,const char *group);
    
strcspn(const char *str,const char *group);
    group指定了一个或者多个字符。strspn返回str起始部分匹配group里任意字符的字符数,如果str离包含空格和制表符那么这个函数将返回str其实部分空白字符的数目
strcspn正好与之相反的计算了不匹配的字符数目一旦出现相等的就不统计了!!
下面的代码将计算指向第一个非空白字符的指针的值:char *ptr=buffer+strspn(buffer,"\n\r\t\v");

  • 查找标记

    找到第一个标记并将它置成NULL 保存它的位置并且下次从上次保存的位置开始找下一个标记。

  • 提取表及


本文出自 “Zimomo” 博客,请务必保留此出处http://zimomo.blog.51cto.com/10799874/1762388

版权声明:本文为博主原创文章,未经博主允许不得转载。

Python 爬虫瞎玩系列(1) —— Bilibili的前100个上古巨坟考古

Python 爬虫瞎玩系列(1) —— Bilibili的前100个上古巨坟考古 《Python爬虫从瞎玩到发疯》,零基础,全是胡说。...
  • JayRoxis
  • JayRoxis
  • 2017年05月25日 15:02
  • 1234

百度贴吧挖坟实时监控 python版

有人挖坟会挖坟后即刻删掉自己的回复。让吧务不知道是谁把坟贴挖上来。 代码如下''' # -*- coding: utf-8 -*- 这段代码实现的是实时监控,一旦发现有挖坟者,自动在屏幕上显示。并且...
  • nanwugongzi
  • nanwugongzi
  • 2015年02月26日 15:08
  • 199

Scala在挖财的应用实践

原文地址:http://www.infoq.com/cn/articles/scala-architecture-wacai 编者按:本文是根据ArchSummit大会上挖财资深架构师王宏江的演...
  • yangpl_tale
  • yangpl_tale
  • 2016年02月24日 21:02
  • 893

挖财公司面试分享

对于挖财我真的是不想说,本屌今年大三,暑假想找实习,手头上已有offer,但又收到挖财公司的在线笔试,我面的是Java研发岗位,在杭州就招40个来着,投简历的时候就感觉没戏,招的人数不多,而我又不是在...
  • u011258318
  • u011258318
  • 2015年06月10日 21:21
  • 3207

java 知识点(重要)

1、面向对象的特征有哪些方面?  答:面向对象的特征主要有以下几个方面:  - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,...
  • ching_zhi
  • ching_zhi
  • 2016年11月27日 22:01
  • 756

动态规划基础之挖金矿问题

问题:有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同(情况如下图)。 金矿编号 黄金储量 需要人数 1 500 5 2 200 3 3 300 4...
  • qq_34241037
  • qq_34241037
  • 2017年07月27日 14:58
  • 351

Mina入门实例

继续上一篇,这篇主要讲通过mina往B端发送消息,并接受消息,mina是一个网络通信框架,封装了javaNIO,简单易用,网上有很多关于他的介绍,在此不赘述了。 如上篇所介绍,完成功能,需要五个类: ...
  • StubbornPotatoes
  • StubbornPotatoes
  • 2014年05月31日 20:09
  • 2473

利用树莓派挖比特币

1. 前言:                  你需要理解比特币的概念                  你需要知道...
  • u013511513
  • u013511513
  • 2014年06月18日 22:42
  • 3340

JZOJ 4809 【NOIP2016提高A组五校联考1】挖金矿

挖金矿题目大意给出一个nn行hh列的矩阵,每一行可以选择前 kk个数(11
  • XianHaoMing
  • XianHaoMing
  • 2016年10月04日 21:14
  • 1528

字符串的知识点

字符串   1.如何使用字符串分两步:① 定义并初始化字符串。   ② 使用字符串,对字符串进行一些处理。    2.字符串的比较     语法:字符串1.equals (字符串2);    ...
  • jiuytgjgtg
  • jiuytgjgtg
  • 2016年11月20日 21:09
  • 194
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:挖坟字符串知识点
举报原因:
原因补充:

(最多只允许输入30个字)