本文接续《C语言中的匕首 - C风格字符串》。
让我们展开聊聊C风格字符串的常见操作。
字符串比较
比较两个字符串,凭借C标准库里的strcmp函数,这项任务易如反掌。strcmp的函数原型如下。
int strcmp(const char * s1, const char * s2)
从首字符开始,依次比较。
返回值等于0,则两字符串相等。
返回值大于0, 则字符串s1大于s2。
返回值小于0, 则字符串s1小于s2。
例如,
assert(strcmp("hello", "Hello") > 0); // 因为字符h大于字符Hassert(strcmp("hello", "hello ") < 0); assert(strcmp("hello", "hello") == 0);
取子字符串
最常见的字符串操作之一。例如,从一串字符串中取出前五个字符。
熟悉C++的朋友可能知道C++的std::string类有一个取子字符串的方法: std::string substr(size_t pos = 0, size_t len = std::string::npos)。没必要羡慕,我们自造一个类似的C函数。请看示例代码。
#include '; return dest;}int main(){ char s[] = "hello, world!"; char dest[strlen(s) + 1]; substr(dest, s, 0, 5); assert(strcmp("hello", dest) == 0); assert(strcmp("ello,", substr(dest, s, 1, 6)) == 0); assert(strcmp("h", substr(dest, s, 0, 1)) == 0); return 0;}拷贝
char* strcpy(char* source, const char* dest);char* strncopy(char source, const char* dest, size_t len);
熟悉C++的朋友或许在想,拷贝一个字符串,用C++多简单啊,C语言太费事了。而且,你看,C++有很多种办法拷贝一个字符串。
这彰显了C和C++,Java等语言的不同的设计理念和价值观。
C语言用尽量精简的语言核心,竭尽全力使经常性开支(overhead costs)为零。例如,拷贝字符串,用库函数完成,不是发明一种操作符或者重用某种操作符来完成。这是很多高级C程序员热爱C的源泉,这也是C语言长盛不衰的原因之一。C++引入各种语法,尽量使经常性开支(overhead costs)降为零。例如,拷贝用重载操作符“=”等实现。C++由此走上不停扩张语言的道路,越来越庞大。C++程序员和C++编译器不断升级学习新内容和避免新旧知识发生冲突。类似C++, Java引入各种各样的语法和其他语言花式,把设计焦点放在安全性和移植性上,而经常性开支不是重点,只要试图控制在电脑和程序员可以忍受的范围内就好了。拼接
用C如何拼接字符串?C语言标准库已有了相关库函数。
char* strcat(char* dest, const char* src);char* strncat(char* dest, const char* src, size_t n);
例如,我们拼接两个C风格字符串s1和s2,形成一个新的C风格字符串s3。如何编程?请看。
char s1[] = "hello,";char s2[] = " world!";char s3[strlen(s1) + strlen(s2) + 1];s3[0] = '\0'; // 注意!这一步不能省略strcat(s3, s1);strcat(s3, s2);assert(strcmp("hello, world!", s3) == 0);总结
至此,介绍了C风格字符串的常用操作。从例子代码看得出,其实操作C风格字符串并不难。C语言的标准库string.h是C语言程序员的好朋友,内含很多库函数供调用。用好标准库中的库函数一举两得,一避免重复造轮子,二获得良好的代码可移植性。
然而,有没有更好地使用C风格字符串的策略呢?能不能取C和C++二者最好的部分,用来处理字符串呢?且看下篇文章详解。
相关视频:
C语言中的匕首 - C风格字符串
相关文章:
C语言中的匕首 - C风格字符串
C语言中的定时炸弹 - scanf函数
喜欢就点赞。 更多精彩,请关注我
今日头条号/西瓜视频/抖音:IT之州
标签: 字符串
②文章观点仅代表原作者本人不代表本站立场,并不完全代表本站赞同其观点和对其真实性负责。
③文章版权归原作者所有,部分转载文章仅为传播更多信息、受益服务用户之目的,如信息标记有误,请联系站长修正。
④本站一律禁止以任何方式发布或转载任何违法违规的相关信息,如发现本站上有涉嫌侵权/违规及任何不妥的内容,请第一时间反馈。发送邮件到 88667178@qq.com,经核实立即修正或删除。