strcmp函数使用中的一些细节问题
2019独角兽企业重金招聘Python工程师标准>>>
#include <algorithm>
#include <iostream>
#include <cstring>
int main()
{
//一个基类型为const char*的数组, const char*类型本质上就是一些C风格的字符串常量。特别注意NULL是个特例。
char const* strings[] = {
"hello",
"world",
"computers",
"are",
"awesome",
NULL //这里是故意这样设置的,经过测试程序是支持对NULL元素的比较 的。要在比较函数中处理。
};
//可以在函数内部定义结构体。
struct {
bool operator()(char const* a, char const* b) const {
//a&&b保证调用strcmp的前的正确性判断。
//许多标准库中的函数都没有提供合法性检验。比如开方函数sqrt, 参数是有符号类型的,但是计算-1的结果却得不到正确的值.
//当a,b都可以保证是非空时,对a,b进行字符串比较,strcmp(a,b)<0在sort函数中等价于对字符串进行字典升序排序。而a,b有一个为空时,按字符串表示的地址进行比较,因为有效地址总是大于NULL,所以a<b相当于,排序时将NULL放在开头。
//当a<b时,strcmp返回值小于0
return (a && b) ? 0 > strcmp(a, b) : a < b;
}
} cmp; //声明一个函数对象。
std::sort(std::begin(strings), std::end(strings), cmp); //这里注意begin,end两个函数的用法。
//s可能取NULL所以需要对s的值进行判断,否则会报错。另外注意对于条件表达式最好在外面整体套上括号,特别是出现在cout语句中。否则可能出现意想不到的情况。比如这里如果不加括号,结合情况就变成了“NULL"<<"\n"的整体再与:结合,并报错“表达式必须具有整数或未区分范围的枚举类型”,应该是将<<当作移位运算符,但提示“NULL"和“\n”不能用于移位运算。
for (auto& s : strings) //c++中的foreach语句
std::cout << ((NULL!=s)?s:"NULL" )<< "\n";
std::cout <<(1? 2 << '\n':4) << std::endl; //输出2048,即将2左移10位
//‘\n'的ascii码值0x0A,2*1024=2048).移位的位数必须是与整型兼容的类型,字符串类型是绝对不可以的。就向上面报错的那样。
return 0;
}
转载于:https://my.oschina.net/ray1421/blog/691314
strcmp函数使用中的一些细节问题相关推荐
- 详解字符串比较函数:strcmp函数及其模拟实现
详解字符串比较函数:strcmp函数及其模拟实现!!! 对于字符串比较函数:strcmp函数,想必大家也不会感觉陌生,毕竟在之前就有过接触!虽然很少使用,但是,见面了也能认出来!只不过不太怎么使用过罢 ...
- C语言不用strcmp函数比较字符串大小
C语言不用strcmp函数比较字符串大小 #include <stdio.h> int main(){int i, res;char s1[100], s2[100];printf(&qu ...
- strcmp函数和strcpy函数
(一)strcmp函数 strcmp函数是比較两个字符串的大小,返回比較的结果.一般形式是: i=strcmp(字符串,字符串); 当中,字符串1.字符串2均可为字符串常量或变量:i 是用于存放比 ...
- 【C 语言】二级指针作为输入 ( 指针数组 | 指针数组排序 | 字符串排序 | strcmp 函数 )
文章目录 一.strcmp 函数 二.指针数组排序 ( 字符串排序 ) 二.完整代码示例 一.strcmp 函数 strcmp 是 String Compare 缩写 , 该函数用于比较两个字符串 ; ...
- Uva 11732 strcmp()函数
题目链接:https://vjudge.net/contest/158125#problem/A 题意: 系统中,strcmp函数是这样执行的,给定 n 个字符串,求两两比较时,strcmp函数要比较 ...
- strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
strcpy函数: char *strcpy(char *Dest , const char *Src) { assert((Dest != NULL) && (Src != NULL ...
- 蓝桥杯-11-1实现strcmp函数(java)
算法提高 11-1实现strcmp函数 时间限制:1.0s 内存限制:256.0MB问题描述自己实现一个比较字符串大小的函数,也即实现strcmp函数.函数:int myStrcmp(char *s1 ...
- OpenCV reshape函数需要注意的细节
OpenCV reshape函数需要注意的细节 [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/details/80252853 本人在使 ...
- C和指针之字符串简单实现strchr、strcmp函数
1.问题 简单实现strchr.strcmp函数 2.代码实现 #include <stdio.h> #include <string.h>/** 简单模拟strchr函数 * ...
- 编写一个C程序,实现以下功能:用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp(char *p1,char *p2);设p1指向字符串s
题目描述: 编写一个C程序,实现以下功能: 用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为: int strcmp(char *p1,char *p2); 设p1指向字符串s ...
最新文章
- eclipse中 properties文件编码问题
- delphi 窗体透明详解TransparentColorValue,窗体透明控件不透明
- 安装Termux的手机上运行Python
- 10 MM配置-主数据-定义物料类型
- brew 安装php56,homebrew安装php5.6后的信息
- 领导力十律_关于开放领导力的10个最受欢迎的故事
- c++ 二维数组_二维数组的声明2019_04_18
- mysql复杂条件判断_MySQL复杂where条件分析
- 95-850-020-源码-心跳-JobMaster与TaskExecutor之间的心跳检测
- 【Java基础】RTTI与反射之Java
- ajax上传文件时显示进度
- 扇贝编程python学习笔记-基础篇4
- Java程序员的魔法杖-Arthas 3.1.2版本发布了
- 经典布局(flex和传统两种实现)—左中右三栏式
- python 保存网页图片到本地
- 幻想乡三连C:狂飙突进的幻想乡
- 洛克人java下载_洛克人-威利博士末日
- Ubuntu 20.04系统中VSCode+CMake+GTest实现C++程序自动化单元测试的详细方法
- 解决方案|在线自习室
- 用C语言学习高中数学:前言&创建集合