C语言实现strcmp

注意转化为unsigned char:

strcmp.h

 1 #ifndef STRCMP_H
 2 #define STRCMP_H
 3
 4 /***************************************************
 5 功能:比较字符串s1和s2。
 6  一般形式:strcmp(s1,s2)
 7   返回值:
 8     当s1<s2时,返回值<0
 9     当s1=s2时,返回值=0
10     当s1>s2时,返回值>0
11 ****************************************************/
12
13 int cat_strcmp(const char *src, const char *dst) {
14     int ret = 0;
15
16     while (!(ret = (*(unsigned char *)src - *(unsigned char *)dst)) && *dst)
17         ++src, ++dst;
18
19     if (ret < 0)
20         ret = -1;
21     else if (ret > 0)
22         ret = 1;
23
24     return ret;
25 }
26
27 #endif

main:

 1 #include "strcmp.h"
 2
 3
 4 void test_strcmp();
 5
 6 int main() {
 7     test_strcmp();
 8
 9     return 0;
10 }
11
12 void test_strcmp() {
13     char *s1 = "compare", *s2 = "compase";
14     printf("%d\n", cat_strcmp(s1, s2));
15
16     char *s3 = "compare", *s4 = "compar";
17     printf("%d\n", cat_strcmp(s3, s4));
18
19     char *s5 = "compar", *s6 = "compare";
20     printf("%d\n", cat_strcmp(s5, s6));
21
22     printf("%d\n", cat_strcmp(s3, s6));
23 }

/**
拓展:
unsigned char和char:
http://blog.sina.com.cn/s/blog_5c6f793801019oij.html
http://blog.csdn.net/world7th/article/details/1543575
*/

时间: 2024-10-21 00:56:45

C语言实现strcmp的相关文章

C语言实现strcmp()和strcpy()函数

#include <stdio.h> #include <assert.h> char *strcpy(char *strDest, const char *strScr) { char *address = strDest; assert((strDest != NULL) && (strScr != NULL)); while(*strScr) { *strDest++ = *strScr++; } *strDest = '\0'; return address

恶补c语言之strcmp的实现

strcmp()函数说明 按照ASCII表的先后顺序,比较两个字符串中各个对应字符大小:相同则返回0,不同则返回减值. 设这两个字符串为str1,str2, 若str1==str2,则返回零: 若str1>str2,则返回正数: 若str1<str2,则返回负数. 注:不同的编译器对返回值有不同的规定 int strcmp(char* str1, char* str2){ while(*str1 && *str2 && *str1==*str2){ ++str1

【C语言】strcmp函数的实现

strcmp: C/C++函数,比较两个字符串 设这两个字符串为str1,str2, 若str1==str2,则返回零: 若str1>str2,则返回正数: 若str1<str2,则返回负数. 根据这些我们来实现这个函数: <span style="font-size:18px;">#include<stdio.h> #include<assert.h> int my_strcmp(char const *str1,char const

oc语言学习之基础知识点介绍(二):类和对象的进一步介绍

一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造成内存泄露 全局区:所有的全局变量和静态变量 常量区:所有的常量 代码区:程序编译后的指令集 类是模板,肯定需要存在内存里面,因为实例化对象的时候需要根据这个模板来创建,那么存在内存里面,存在哪呢?? 类模板存在:全局区! 存的是:类的描述,还有所有的方法实现 每个对象都会有一个系统给我们的isa指

C 实现strcmp,strcpy,strcat函数

基于C语言的strcmp,strcpy,strcat函数的实现.C语言是一个程序员的基础,一定要重视. char* strcat ( char * dst , const char * src ) { char * cp = dst; while( *cp ) cp++; /* find end of dst */ while( *cp++ = *src++ ) ; /* Copy src to end of dst *///一直到赋完'\0' return( dst ); /* return

Swift # 字符串

//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground" println("----字符----"); /* 字符: Swift和OC字符不一样, Swift是用双引号. Swift中的字符类型和OC中的也不一样, OC中的字符占一个字节,因为它只包含ASCII表中的字符, 而Swift中的字符除了可以存储ASCII表中的字符还可以存

Java中的equals()和hashCode()

概述 在我们使用类集框架(比如使用hashMap.hashSet)的时候,经常会涉及到重写equals()和hashCode()这两个方法. 这两个方法的联系是: 1. 如果两个对象不同,那么他们的hashCode肯定不相等: 2. 如果两个对象的hashCode相同,那么他们也未必相等. 所以说,如果想在hashMap里面让两个不相等的对象对应同一个值,首先需要让他们的hashCode相同,其次还要让他们的equals()方法返回true,因此为了达到这个目的,我们就只能重写hashCode(

Swift与OC的语法简单对比

01-常量与变量   学习swift第一步打印Hello World print("Hello World") swift是不用加分号的 什么是常量? 常量是在程序运行过程中不能改变值的量 什么时变量? 变量是可以在程序运行过程中不断变化的量 在swift当中常量和变量必须在使用前声明 用let来声明常量,用var来声明变量 常量定义方式: 可以用任何你喜欢的字符作为常量和变量名,包括Unicode字符 常量与变量名不能包含以下: 数学符号,箭头,保留的(或者非法的)Unicode码位

标准类型内建函数 cmp()介绍

内建函数cmp()用于比较两个对象obj1 和obj2, 如果obj1 小于obj2, 则返回一个负整数,如果obj1 大于obj2 则返回一个正整数, 如果obj1 等于obj2, 则返回0.它的行为非常类似于C 语言的strcmp()函数.比较是在对象之间进行的,不管是标准类型对象还是用户自定义对象.如果是用户自定义对象, cmp()会调用该类的特殊方法__cmp__().在第13 章会详细介绍类的这些特殊方法.下面是几个使用cmp()内建函数的对数值和字符串对象进行比较的例子. >>&g