每天一道C++笔试题 III --- strcmp

这道题主要考察指针和字符串(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;
}


你可能感兴趣的:(每天一道C++笔试题 III --- strcmp)