C++--4--字符排序问题-strcmp函数

C++--4--字符排序问题-strcmp函数,第1张

C++--4--字符排序问题-strcmp函数

字符排序问题-strcmp函数

1.函数声明:

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

extern int strncmp (const char * str1, const char * str2, size_t n );

2.需要包含头文件#include 3.函数的调用:

strcmp(str1,str2);

strncmp(str1,str2,n);

4.所实现的功能:

当str1

当str1=str2时,返回值为零

当str1>str2时,返回一个正数

即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇""为止。

如:"A"<"B" "a">"A" "computer">"compare"

  • 与strcmp不同,strncmp是只比较两个字符串的前n位

特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。

5.stricmp与strnicmp:

以大小写不敏感的方式比较两个字符串,具体功能与说明同strcmp

6.一例实现代码:  
#include 

#include 

#undef strcmp

int strcmp (p1, p2)

const char *p1;

const char *p2;

{

  register const unsigned char *s1 = (const unsigned char *) p1;

  register const unsigned char *s2 = (const unsigned char *) p2;

  unsigned reg_char c1, c2;

  do{

  c1 = (unsigned char) *s1++;

  c2 = (unsigned char) *s2++;

  if (c1 == '')

  return c1 - c2;

  }

  while (c1 == c2);

  return c1 - c2;

}

libc_hidden_builtin_def (strcmp)
7.__THROW之类的起什么作用?

extern int strcmp (__const char *__s1, __const char *__s2)
     __THROW __attribute_pure__ __nonnull ((1, 2));

  • attribute_pure ,nonull等属性,都需要忽略。如果需要#if 0里面的定义,可以–if0=yes来忽略 #if 0这样的定义。
  • strcmp等查不到定义的函数,为GNU编译器里通过调用系统的Lib库(已经在Lib库中定义)来实现的。

参考:

9.C++: strcmp与strncmp函数 - 黄石forever - 博客园

ctags高级用法 - 立体风 - 博客园

ASCII值对照表 - 王默默 - 博客园

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4950724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存