设为首页收藏本站

编程十万个为什么,属于程序员的编程论坛

 找回密码
 5秒快速注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 8037|回复: 8

[C/C++每日一练] C++笔试题 --- strcmp

[复制链接]
发表于 2013-1-19 11:37:19 | 显示全部楼层 |阅读模式

这道题主要考察指针和字符串(char[]),这是C语言必备的技能,但指针在C++也是重要之极。
题目是大家都熟悉的老调重弹,帮助大家温习之。
不使用库函数,编写函数int strcmp(char *source, char *dest) 相等返回0,不等返回-1。
背景知识:
char string[] = "luck";
1、字符数组的最后添加一个结束字符'\0'就是字符串。
2、用printf("%s",string)即可打印此字符串。
3、数组名string表示数组的首地址。与指针的关系如下代码:

#include <stdio.h>  
  
int main()  
{  
char string[] = "luck";  
char * PString = string;  
printf("string:%s",pString);  
return 0;  
}  

解题思路:
最简单:做一个循环,对比两个字符串的元素是否相同,不同则返回-1;循环结束后没有找到不同,返回0.

int strcmp(char *source,char *dest)  
{  
    while(*source != '\0')  
    {  
        if((*source - *dest) != 0)  
        {  
            printf("return %d \n",*source - *dest);  
            return -1;  
        }  
        else  
        {  
            printf("point ++ \n");  
            source++;  
            dest++;  
        }  
    }  
    return 0;  
}  

逻辑清晰后,上面两个判断条件可以更加精简一些,下面是全部测试代码:

#include <stdio.h>  
  
int strcmp(char *source,char *dest)  
{  
    while(*source)  
    {  
        if(*source - *dest)  
        {  
            printf("return %d \n",*source - *dest);  
            return -1;  
        }  
        else  
        {  
            printf("point ++ \n");  
            source++;  
            dest++;  
        }  
    }  
    return 0;  
}  
  
int main()  
{  
    int returnValue;  
    char str1[80],str2[80];  
  
    printf("please input a string:");  
    scanf("%s",str1);  
    printf("please input another string:");  
    scanf("%s",str2);  
  
    returnValue = strcmp(str1,str2);  
    if(returnValue == 0)  
    {  
        printf("Same string!");  
    }  
    else  
    {  
        printf("Different string!");  
    }  
  
    return 0;  
}  
发表于 2013-1-20 00:28:22 掌上BcWhyBcWhy手机版 | 显示全部楼层
基础中   看的模糊来自: Android客户端
发表于 2013-1-28 17:39:36 | 显示全部楼层
夜影偶像老师 有刚入门白痴级的课程吗?
 楼主| 发表于 2013-1-28 22:18:47 | 显示全部楼层
唄唄 发表于 2013-1-28 17:39
夜影偶像老师 有刚入门白痴级的课程吗?

好像没有诶。
发表于 2013-5-8 17:01:21 | 显示全部楼层
好厉害的说,看来我还是没有学透!!!
发表于 2013-6-27 19:13:26 | 显示全部楼层
这个还有点问题 程序不够健壮  assert(source != NULL &&  dest!= NULL);
发表于 2013-6-27 19:19:06 | 显示全部楼层
还有问题  当第一字符串为“add” 第二个为“addd” 返回的还是0  程序逻辑有问题
发表于 2014-2-13 11:35:11 | 显示全部楼层
int strcmp(const char *str1, const char *str2)
{
        if(strlen(str1) != strlen(str2))
                return 0;

        while(*str1)
        {
                if((*str1 - *str2) != 0)
                        return 0;
                else
                {
                        ++str1;
                        ++str2;
                }
        }
        return 1;
}
发表于 2014-11-25 21:25:32 | 显示全部楼层
????
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 5秒快速注册

本版积分规则

关闭

BcWhy推荐上一条 /1 下一条

QQ|关于我们|最新帖子|小黑屋|手机版|编程十万个为什么 ( 粤ICP备16108587号-2  

GMT+8, 2017-6-24 18:38 , Processed in 0.213616 second(s), 32 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表