C语言字符串操作函数

1.strlen

strlen用于求一个C风格字符串的长度,函数原型为

#include size_t strlen(const char *s);

返回值为字符串的长度,当遇到‘\0‘时,认为字符串结束,‘\0‘不算入长度中。

#include #include

int main(void)

{char *str = "hello,world";int count =strlen(str);

printf("%d\n",count);return 0;

}

结果测试:11

测试结果符合预期,下面一三种方式实现自己的strlen函数。

size_t my_strlen1(const char *str)

{int count=0;

assert(str);//while(str[count++]);//return count-1;

while(*str++)

count++;returncount;

}

size_t my_strlen2(const char *str)

{

assert(str);if(*str == ‘\0‘) return 0;else return my_strlen2(++str)+1;

}

size_t my_strlen3(const char *str)

{char *headstr =str;

assert(str);while(*++str);return str -headstr;

}

第一种使用一次遍历字符串,当字符不为‘\0‘时,count++;

第二种使用递归

第三种使用指针的剪发,用指向最后一个字符的指针减去指向首字符的指针。

2.strnlen

strnlen的原型为

#include size_t strnlen(const char *s, size_t maxlen);

strnlen的功能相当于一个计数器,函数从s的开头往下数,直到遇见‘\0‘或者计数器达到maxlne的值时,停止计数。

其用途主要在于网络图形中,字节流一般是没有‘\0‘的,所以,使用strlen一般会有问题,所有引入strnlen.

3.strcpy

strcpy的原型为

#include

char *strcpy(char *dest, const char *src);

strcpy的作用是将src开始的字符串(包括‘\0‘)复制到以dest为起始点的地址空间,返回值为指向dest的指针。

#include #include

intmain()

{char dest[100];char *src = "hello,world";

strcpy(dest,src);

printf("%s\n",dest);return 0;

}

测试结果:hello,world

符合预期

实现自己的strcpy

#include #include

char *my_strcpy(char *dest,const char *src)

{

assert(dest);

assert(src);while (*dest++ = *src++);returndest;

}

4.strncpy

strncpy的原型是

#include

char *strncpy(char *dest, const char *src, size_t n);

该函数同样字符串拷贝函数,与strcpy不同的是,多了一个参数n。函数的作用是将src所指向的字符串中前n个字符复制到dest中。

5.strcmp

#include

int strcmp(const char *s1, const char *s2);

strcmp用来比较字符串s1和s2的大小,比较方式为字典式比较,比较标准为字符的ASCII值,比如"erfas"和"eradfasa";

逐个比较前两个字符相等,第三个字符‘f’大于‘a‘,所以第一个字符串大。

当s1 大于 s2时,返回正数;

当s1 等于 s2时,返回0;

当s1 小于 s2时,返回负数;

#include #include

intmain()

{char *s1 = "hello wolrd";char *s2 = "change world";int count =strcmp(s1,s2);

printf("%d\n",count);return 0;

}

这段代码在vs2010下结果为1,在gcc下测试结果为5

C语言标准只规定当s1 大于 s2时,返回值为正数,vs一律返回1,而gcc返回ASCII值的差,所以为了程序的

可移植性,不要写出

strcmp(s1,s2) == 1

这样的代码,建议这样写

strcmp(s1,s2) > 0

下面我们尝试实现自己的strcmp

#include #include

int my_strcmp(const char *s1,const char *s2)

{

assert(s1);

assert(s2);while((*s1) == (*s2))

{if((*s1) == ‘\0‘)return 0;

s1++;

s2++;

}if((*s1) - (*s2) > 0) return 1;else return -1;

}

6.strncmp

strncmp的原型为

#include

int strncmp(const char *s1, const char *s2, size_t n);

该函数基本与strcmp差不多,但是只比较两个字符串的前n个字符。

7.strstr

strstr的原型为

#include

char *strstr(const char *haystack, const char *needle);

判断needle是否是haystack的子串,如果是,返回needle在haystack中首次出现的地址,否则,返回NULL

#include #include

intmain()

{char *s1 = "hello,world";char *s2 = "llo,w";char *s3 =strstr(s1,s2);

printf("%s\n",s3);return 0;

}

测试结果为:

llo,world

结果符合预期

8.memset

memset的原型为

#include

void *memset(void *s, int c, size_t n);

memset的作用是将s所指向的内存中的前n个字节全部置为字符c的ASCII值。

#include #include

intmain()

{char s[100];

memset((char *)s,‘c‘,10);

s[10] = ‘\0‘;

printf("%s\n",s);return 0;

}

测试结果:cccccccccc

9.memcpy

memcpy

#include

void *memcpy(void *dest, const void *src, size_t n);

将src的数据复制n个到dest

#include #include

intmain()

{char src[100] = "hello,world";char dest[100];

memcpy(dest,src,11);

printf("%s\n",dest);return 0;

}

测试结果:hello,world

符合预期

memcpy不考虑内存重叠

10.memmove

memmove的原型为

#include

void *memmove(void *dest, const void *src, size_t n);

memmove与memcpy相似,但可以处理内存重叠的问题。

字符串操作 c语言,C语言字符串操作(示例代码)相关推荐

  1. 字符串解压缩c语言除哈夫曼,C语言实现压缩二例(示例代码)

    一 简单字符串压缩 编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串. 压缩规则: 1.仅压缩连续重复出现的字符.比如字符串"abcbc"由于无连 ...

  2. c语言strsep,C/C++ 字符串分割: strtok 与 strsep 函数说明(示例代码)

    函数原型: char *strtok(char *s, const char *delim); char *strsep(char **s, const char *delim); 功能:strtok ...

  3. mysql的dml全,MySQL数据管理----DML语言(全记住)(示例代码)

    DML语言(全记住) 数据库意义:数据存储.数据管理 DML语言:数据操作语言 Insert update delete truncate 1.insert 添加 错误示例: -- 1.指定1个字段, ...

  4. 24点游戏c语言链表做法,C语言实现24点程序(示例代码)

    一.简介 本程序的思想和算法来自于C语言教材后的实训项目,程序通过用户输入四个整数计算出能够通过加减乘除得到数字24的所有表达式,程序的设计有别于一般通过穷举实现的方式,效率得到提高.算法介绍如下: ...

  5. c语言二维数组代码,C语言之二维数组(示例代码)

    二维数组及其指针 1 ) 在了解二维数组之前,我们先来了解一维数组及其指针 我们知道,一维数组中:数组名代表-->数组首元素的首地址(千万不要认为是数组的首地址(&a),绝对不是)在内存 ...

  6. c语言2048代码linux,C语言实现2048小游戏(示例代码)

    2048 一.设计思路 1.游戏规则 想要制作游戏,首先需要了解游戏的规则,下面就来介绍2048的游戏规则 2048游戏共有16个格子,初始时初始数字由2或者4构成. 手指向一个方向滑动,所有格子会向 ...

  7. c语言字母杨辉三角,用C语言编写杨辉三角(示例代码)

    今天给大家带来用C语言在屏幕上输出杨辉三角 杨辉三角: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 思路:主要用到循环和数组的知识,今天就以for循环为例,给大家输出10行的杨辉三角. ...

  8. C语言构建网络包,R语言igraph 包-构建网络图(示例代码)

    igaph 是一个项目,目标是建立一条简单,易用的网络分析工具,有 R, python, C/C++ 等语言的具体实现: 项目主页: http://igraph.org/ 在R语言中,对应的就是 ig ...

  9. c语言中按位异或的作用,C语言 按位异或实现加法(示例代码)

    /*C语言 按位异或实现加法*/#include#include#include voidtest1() {int a = 2;int b = 3;int cand = 0;int cxor = 0; ...

  10. c语言坐标三角形判断,【C语言】判断三角形类型(示例代码)

    根据输入的三角形的三边判断三角形的类型,并输出其面积和类型. #include #include #include int main() { float a, b, c; float s, area; ...

最新文章

  1. excel操作----主要用于数据库入库
  2. 「镁客·请讲」深睿医疗乔昕:AI医疗才起步,说变革尚早
  3. 水果电池打造柠檬电动汽车!
  4. php博客添加live2d,在博客中增加自己的live2d纸片人模型方法
  5. Python实现进度条总结
  6. SAP Fiori Elements - smart field id generation
  7. 计算器排html页面,htmltest~计算器界面的实现
  8. 手写文字识别java_java 手写文字图片识别提取 百度API
  9. 【阿里巴巴-CVPR2020】频域学习,Learning in the Frequency Domain
  10. 空间滤波_第三章 灰度变换与空间滤波-(六)锐化空间滤波器之拉普拉斯算子...
  11. 【服务器】Cloudreve绑定七牛云免费对象存储
  12. Lesson_8 上课笔记 ----继承
  13. Lightroom 教程,如何将照片从 Lightroom 移至Photoshop,在 Ps 中合并图像?
  14. MAC查看一个库的编译版本
  15. 论文:Scalable and accurate deep learning for electronic health records研读笔记
  16. VirtualBox安装Windows XP——图解
  17. 递归下降分析程序 java_递归下降语法分析程序
  18. excel文件修复工具_用EXCEL自己制作批量修改文件名的实用工具
  19. 两年3亿用户,淘特跑出中国电商“加速度”
  20. Python-opencv读取视频流处理后保存成mp4格式的视频源码

热门文章

  1. centos安装zookeeper
  2. golang递归获取目录下的所有文件
  3. 大剑无锋之分布式和微服务分别是什么?【面试推荐】
  4. `>>`(有符号右移) 和 `>>>`(无符号右移)的区别
  5. 海量数据处理:如何从10亿个数中,找出最大的10000个数?(top K问题)
  6. P8-07-23 在 GitLab 提交代码后自动触发 Jenkins 构建;使用禅道进行项目管理
  7. 汇编MIPS指令集 add两数相加、syscall输出字符串、bgt分支语句、ble循环语句
  8. netty系列之:对聊天进行加密
  9. Java如何查看死锁?
  10. 使类和成员的可访问性最小化