挖坟字符串知识点

原创 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

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

相关文章推荐

程序员——C语言之函数、进制、数组、字符串易错知识点

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1.函数  1.函数返回值 返回值类型  函数名(形式参数列表) {        ...

java算法知识点解析(1):字符串操作

华为面试题: 按要求分解字符串,输入两个数M,N; M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。 例如:输入2,8, “abc” ,“123456789”, 则输出为“a...

python一些基本知识点之字符串(一)

1、在dos命令下,将.py文件保存成.txt文件:

java知识点:dom4j 由map转字符串

map.toString()是这样子的~ {welcome-file-list={welcome-file=[index.html, {a=[{b=[{c=[c1c1c1c1c1c1, c2c2c2...

C语言字符串查找知识点搬运

1.  头文件:#include strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:     char * strchr (const char *str, in...

JAVA学习之 35-JAVA中的字符串知识点整理(二)

五、格式化字符串 String类的静态format()方法用于创建格式化的字符串。 format()方法有两种重载形式: (1)format(String format,Object ..arg...

知识点小节2(字符串中包含单引号)

1.关于在字符串中包含单引号 字符串是引用字符串的,如果字符串本身就包含单引号怎么办? 用2个单引号表示或者以q或Q开头,然后后面是字符串,字符串的第1个字符和最后结束的字符是分割符号,中间的引号随便...

小知识点探究——字符串存储信息

小知识嗲探究——字符串存储信息和解读存储的信息

JAVA学习之 36-JAVA中的字符串知识点整理(三)

七、字符串生成器 创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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