C/C++用strncpy()与strstr()分割与匹配查找字符串

最近做题遇到分割与匹配字符串的题目(hdu5311),看来别人的代码,才知道有strncpy()和strstr()函数,于是搜集了一点资料,记录一下基本用法。

一、strncpy()

char * strncpy ( char * destination, const char * source, size_t num );

   strncpy() 在 <string.h>头文件中(C++中为<cstring>),拷贝原字符串S中长度为num的部分至目标字符串D中。

  

#include <stdio.h>
#include <string.h>

int main() {
    char source[] = "hello world";
    char str1[20];
    char str2[20];
    // 拷贝source中从0到5的字符串
    strncpy(str1, source, 6); // 0~5: 长度为6
    puts(str1);
    // 运行后结果为 hello

    // 拷贝source中从1到5的字符串
    strncpy(str2, source+1, 5); // 1~5: 长度为5
    puts(str2);
    // 运行后结果为 ello

    // 原字符串不变
    puts(source);
    // 运行后结果为 hello world
    return 0;
}

  分割字符串中,原字符串是不会改变的,同时分割的起点是通过指针控制的,而结束点则是通过长度间接决定的,使用时需要注意。

二、strstr()

const char * strstr ( const char * str1, const char * str2 );
      char * strstr (       char * str1, const char * str2 );

  其中str1是原字符串,str2是带匹配的字符串,放回第一次str2出现的位置(指针)

#include <stdio.h>
#include <string.h>

int main() {
    char source[] = "hello world hello world";
    char str1[] = "hello";
    char *str2;

    // 查找第一个hello出现的位置
    printf("%d\n", strstr(source, str1) - source);
    // 运行后结果为0

    // 查找第一个world出现的位置
    str2 = strstr(source, "world");
    printf("%d\n", str2 - source);
    // 运行后结果为6

    // 查找第二个world出现的位置
    printf("%d\n", strstr(source + (str2 - source) + 1, "world") - source);
    // 运行后结果为18

    return 0;
}

   因为返回的是指针,如果需要计算位置的话,可以通过指针相减的方式,进行计算得到。

  因为返回的时第一次找到的位置,所以要想找到第N次(N > 1)出现的位置,就要从第N-1次出现的位置+1处开始寻找。

时间: 2024-11-10 13:29:17

C/C++用strncpy()与strstr()分割与匹配查找字符串的相关文章

C语言——常用标准输入输出函数 scanf(), printf(), gets(), puts(), getchar(), putchar(); 字符串拷贝函数 strcpy(), strncpy(), strchr(), strstr()函数用法特点

1 首先介绍几个常用到的转义符 (1)     换行符"\n", ASCII值为10: (2)     回车符"\r", ASCII值为13: (3)     水平制表符"\t", ASCII值为 9: (4)     空字符"\0" ,ASCII值为0: (5)     空:NULL (即为0): (6)     空格键space, ASCII值为32: 2 常用输入输出函数 scanf() , 从缓冲区读入数据,以空格,制

strstr()查找函数,strchr(),strrchr(),stristr()/strpos(),strrpos()查找字符串位置

在一个较长的字符串这查找匹配的字符串或字符,其中strstr()和strchr()是完全一样的. 例: echo strstr('why always you','you'); 输出: you 如果为: echo strstr('why always you','you'); 则无输出 stristr()函数对大小写不敏感 strrchr()函数会输出找到的字符串及字符串以后的字符 echo strrchr('why always you','always'); 输出: always you 有

JS中同步显示并分割输入的数字字符串

题目比较晦涩,来张图来说明要表达的效果: 第一张图的效果就是,用户输入一个数字,上面就显示一个大层,然后显示输入的数字,并把数字用空格按照每四位分割出来.好像在建行的网上银行上面就有这种效果.第二个图的效果就是用户在一个文本框中输入一串数字,然后再光标离开的时候,把数字按照每三位用逗号给分割开来,类似于老外的金钱输入效果. 效果一 同步显示分割分割输入 这种效果中,仿造的就是输入银行卡子类的,故只能够输入数字,需要禁用用户输入的其它字符下面是几种实现方式.先贴上HTML和CSS代码: 1 <ht

通过正式表达式分割带有分号的字符串

今天一测试同事问我如何用正则表达式分割一带有分号的字符串,好久没有用正则了,不过还是很快就解决了, MzFmLTlmOTktMDU5MTBlYzlhNGNkIn0=;043ffad5 获取分号前的字符串 ^.*[=] 获取分号后的字条串 [^;]*.$ 好了解决了 通过正式表达式分割带有分号的字符串

在字符串中查找字符串 Strstr() StrstrSpan()

/* Description: The strstr function locates the firstoccurrence in the string pointed to by s1 of the sequence of characters(excluding the terminating\ null character)in the string pointed to by s2. Returns: The Strstr function returns a pointer to t

(一一一)图文混排基础 -利用正则分割和拼接属性字符串

很多时候需要用到图文混排,例如聊天气泡中的表情,空间.微博中的表情,例如下图: 红心和文字在一起. 比较复杂的情况是表情夹杂在文字之间. 要实现这种功能,首先要介绍iOS中用于显示属性文字的类. 用于文字显示的类除了text属性之外,还有attributedText属性,这个属性是NSAttributedString类型,通过这个属性可以实现不同文字的不同字体.颜色甚至把图片作为文字显示的功能. 下面介绍这个字符串的使用. 以一条微博内容为应用场景,介绍如何从中找出表情.话题等内容,其中表情替换

分割,截取连接字符串

if (!empty($iddstr)) { $darr=explode("\r\n",$iddstr); foreach ($darr as $key => $value) { $lp_num = explode("——",$value); if(strlen($lp_num[0])!=10||strlen($lp_num[1])!=10){ $tt = $key + 1; $this->assign('iddstr',$iddstr); $this-

JAVA中 我要将字符串以空格为标记分割成多个字符串,并将分割后的字符串设为一个字符串数组

public class Test {public static void main(String[] args) {String string="a b c  d e f g";String Count[] = string.split(" ");   //遇到空格就拆分.for(int i=0;i<Count.length;i++){  System.out.println(Count[i]);      //输出数组Count的数   }}}

内存及字符串操作篇strlen strchar strcmp strcoll strcpy strdup strstr strtok strspn strrchr bcmp bcopy bzero index memccpy memset

bcmp(比较内存内容) 相关函数 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp 表头文件 #include<string.h> 定义函数 int bcmp ( const void *s1,const void * s2,int n); 函数说明 bcmp()用来比较s1和s2所指的内存区间前n个字节,若参数n为0,则返回0. 返回值 若参数s1 和s2 所指的内存内容都完全相同则返回0 值,否则返回非零值. 附加说明 建议使用memc