挖坟字符串知识点

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

一、字符串基本知识
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 保存它的位置并且下次从上次保存的位置开始找下一个标记。

  • 提取表及
时间: 2024-10-14 05:03:46

挖坟字符串知识点的相关文章

去除字符串前后空格,挖出新字符串

#include<stdio.h>void trimspae(char *str,char *newstr){ char*p=str; int i,j,ncount; i=0; j=strlen(p)-1; if(str==NULL||newstr==NULL) { printf("func trimspace() \n"); return -1; } while(isspace(p[i])&&p[i]!=0) { i++; } while(isspace(

ios学习总结--常用的字符串操作

本文总结一下我们常用的字符串的基本操作,在此与大家分享学习. 1.字符串的创建以及初始化 string:方法:创建字符串 NSString *str1 = [NSString string]; str1 = @"Test1"; stringWithstring:方法:用字符串来创建字符串 1 NSString *str2 = [NSString stringWithString:str1]; UTF8String:方法:NSString转换成C字符串 NSString *str2 =

PHP第八课 字符串拆分常用函数

课程概要: 通过这节课能够对字符串进行基本的操作. 字符串知识点: 1.字符串的处理介绍 2.常用的字符串输出函数 3.常用的字符串格式化函数 4.字符串比较函数 5.正则表达式在字符串中的应用 6.与per1兼用的正则表达式 1.pathinfo();//返回域名的path信息 2.parse_url(); 3.parse_str();//用来拆分参数用的 pathinfo(); <?php $str="http://blog.csdn.net/junzaivip"; $arr

C#forUnity快速入门(连载12)-C#的字符串

C# for Unity编程语言快速入门教程(连载12)_C#的字符串 "C#字符串"是一个重要的知识点,对于C#初学者来说有很多重要知识点需要进行学习,总体归纳有三个大的方面: 知识点一:  字符串的常用方法与属性 属性:     Length:           得到字符串的长度   方法:    IsNullOrEmpty()   表示空字符串: IndexOf()  :           查找指定字符(子字符串). SubString():          字符串截取(得

判断字符串是否为数字格式

import java.util.Scanner; /*判断字符串是否是数字格式*/ public class CheckNum {    public static void main(String args[]){    Scanner scanner = new Scanner(System.in);    System.out.println("请输入要验证的字符串:");    String str = scanner.next();    char c[] = str.to

iOS开发-OC语言 (三)字符串

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 24.0px "PingFang SC" } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px Helvetica; min-height: 29.0px } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "PingFang SC&

CSS计数器(序列数字字符自动递增)详解———张鑫旭

by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=4303 一.挖坟不可耻 CSS计数器不是什么新鲜玩意了,早在10年春暖花开的时候,我写的“CSS content内容生成技术以及应用”一文就要提到(见下图),不过当时是作为其中一员介绍.就像例行的溜新同事一样,虽然黑如焦炭的我在自我介绍的时候给新同事留下了深刻印象,但由于介绍的同事茫茫多,我只是其中一员.很自然,个把月之

优化MySchool数据库设计之【巅峰对决】

优化MySchool数据库设计 之独孤九剑 船舶停靠在港湾是很安全的,但这不是造船的目的 By:北大青鸟五道口原玉明老师 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识点时,要进行验证 02.查看帮助文档和搜索引擎的使用 借助网络上的Blog文章 03.不要急功近利 不要抱着速成的想法,否则必然走弯路学习编程不是一蹴而就的事情付出的成本高,才能有一个高薪的收入 04.不要浮躁 不要什么都学,只学有用的 浮躁的程度和技术水平成反比的走自己的路,让别人去浮躁去吧! 每

Linux C语言中gotoxy函数

在Linux中很多函数都不能使用,gotoxy就是其中的一个 实现方法: void gotoxy(int x,int y) { printf("%c[%d;%df",0x1B,y,x); } 解析: ANSI转义序列,很多类unix的终端,包括linux控制台都解释ANSI转义序列,转义符就是ESC,ASCII码是0x1b,比如 Plain Text code Esc[Line,Columnf 就表示移动光标到(Line,Column)的位置.而你printf打印的字符串正是这个命令,