字符串操作 c语言,C语言字符串操作(示例代码)
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语言字符串操作(示例代码)相关推荐
- 字符串解压缩c语言除哈夫曼,C语言实现压缩二例(示例代码)
一 简单字符串压缩 编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串. 压缩规则: 1.仅压缩连续重复出现的字符.比如字符串"abcbc"由于无连 ...
- c语言strsep,C/C++ 字符串分割: strtok 与 strsep 函数说明(示例代码)
函数原型: char *strtok(char *s, const char *delim); char *strsep(char **s, const char *delim); 功能:strtok ...
- mysql的dml全,MySQL数据管理----DML语言(全记住)(示例代码)
DML语言(全记住) 数据库意义:数据存储.数据管理 DML语言:数据操作语言 Insert update delete truncate 1.insert 添加 错误示例: -- 1.指定1个字段, ...
- 24点游戏c语言链表做法,C语言实现24点程序(示例代码)
一.简介 本程序的思想和算法来自于C语言教材后的实训项目,程序通过用户输入四个整数计算出能够通过加减乘除得到数字24的所有表达式,程序的设计有别于一般通过穷举实现的方式,效率得到提高.算法介绍如下: ...
- c语言二维数组代码,C语言之二维数组(示例代码)
二维数组及其指针 1 ) 在了解二维数组之前,我们先来了解一维数组及其指针 我们知道,一维数组中:数组名代表-->数组首元素的首地址(千万不要认为是数组的首地址(&a),绝对不是)在内存 ...
- c语言2048代码linux,C语言实现2048小游戏(示例代码)
2048 一.设计思路 1.游戏规则 想要制作游戏,首先需要了解游戏的规则,下面就来介绍2048的游戏规则 2048游戏共有16个格子,初始时初始数字由2或者4构成. 手指向一个方向滑动,所有格子会向 ...
- c语言字母杨辉三角,用C语言编写杨辉三角(示例代码)
今天给大家带来用C语言在屏幕上输出杨辉三角 杨辉三角: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 思路:主要用到循环和数组的知识,今天就以for循环为例,给大家输出10行的杨辉三角. ...
- C语言构建网络包,R语言igraph 包-构建网络图(示例代码)
igaph 是一个项目,目标是建立一条简单,易用的网络分析工具,有 R, python, C/C++ 等语言的具体实现: 项目主页: http://igraph.org/ 在R语言中,对应的就是 ig ...
- c语言中按位异或的作用,C语言 按位异或实现加法(示例代码)
/*C语言 按位异或实现加法*/#include#include#include voidtest1() {int a = 2;int b = 3;int cand = 0;int cxor = 0; ...
- c语言坐标三角形判断,【C语言】判断三角形类型(示例代码)
根据输入的三角形的三边判断三角形的类型,并输出其面积和类型. #include #include #include int main() { float a, b, c; float s, area; ...
最新文章
- excel操作----主要用于数据库入库
- 「镁客·请讲」深睿医疗乔昕:AI医疗才起步,说变革尚早
- 水果电池打造柠檬电动汽车!
- php博客添加live2d,在博客中增加自己的live2d纸片人模型方法
- Python实现进度条总结
- SAP Fiori Elements - smart field id generation
- 计算器排html页面,htmltest~计算器界面的实现
- 手写文字识别java_java 手写文字图片识别提取 百度API
- 【阿里巴巴-CVPR2020】频域学习,Learning in the Frequency Domain
- 空间滤波_第三章 灰度变换与空间滤波-(六)锐化空间滤波器之拉普拉斯算子...
- 【服务器】Cloudreve绑定七牛云免费对象存储
- Lesson_8 上课笔记 ----继承
- Lightroom 教程,如何将照片从 Lightroom 移至Photoshop,在 Ps 中合并图像?
- MAC查看一个库的编译版本
- 论文:Scalable and accurate deep learning for electronic health records研读笔记
- VirtualBox安装Windows XP——图解
- 递归下降分析程序 java_递归下降语法分析程序
- excel文件修复工具_用EXCEL自己制作批量修改文件名的实用工具
- 两年3亿用户,淘特跑出中国电商“加速度”
- Python-opencv读取视频流处理后保存成mp4格式的视频源码
热门文章
- centos安装zookeeper
- golang递归获取目录下的所有文件
- 大剑无锋之分布式和微服务分别是什么?【面试推荐】
- `>>`(有符号右移) 和 `>>>`(无符号右移)的区别
- 海量数据处理:如何从10亿个数中,找出最大的10000个数?(top K问题)
- P8-07-23 在 GitLab 提交代码后自动触发 Jenkins 构建;使用禅道进行项目管理
- 汇编MIPS指令集 add两数相加、syscall输出字符串、bgt分支语句、ble循环语句
- netty系列之:对聊天进行加密
- Java如何查看死锁?
- 使类和成员的可访问性最小化