C程序设计 (第四版) 谭浩强 习题8.17
习题 8.17 写一函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为int strcmp(char *p1, char *p2); 设p1指向字符串s1,p2指向字符串s2。要求当s1=s2时,返回值为0;若s1!=s2,返回它们二者第1个不同字符的ASCII码差值(如"BOY"与"BAD",第2个字母不同,"O"与"A"之差为79-65=14)。如果s1>s2,则输出正值;如果s1<s2,则输出负值。
IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块
方法1:
#include <stdio.h>
#include <stdlib.h>
int strCompare(char *p1, char *p2); //定义strcmp函数
int main(){
char s1[20], s2[20];
printf("Please enter s1 string: "); //输入字符串s1
gets(s1);
printf("Please enter s2 string: "); //输入字符串s2
gets(s2);
printf("Result: %d\n", strCompare(s1, s2)); //输出返回值
system("pause");
return 0;
}
//strCompare函数
int strCompare(char *p1, char *p2){
for(; *p1 == *p2 && (*p1 != '\0' || *p2 != '\0'); p1++, p2++);
return *p1 - *p2;
}
方法2:使用指针,动态分配内存
#include <stdio.h>
#include <stdlib.h>
#define N 80
void initialStr(char **str1, char **str2, int n){
*str1 = (char*)malloc(n * sizeof(char));
*str2 = (char*)malloc(n * sizeof(char));
}
void inputStr(char *str1, char *str2){
printf("Enter string 1: ");
gets(str1);
printf("Enter string 2: ");
gets(str2);
}
int strCompare(char *p1, char *p2){
for(; *p1 == *p2 && (*p1 != '\0' || *p2 != '\0'); p1++, p2++);
return *p1 - *p2;
}
void freeStr(char **str1, char **str2){
free(*str1);
free(*str2);
}
int main(){
char *str1 = NULL;
char *str2 = NULL;
initialStr(&str1, &str2, N);
inputStr(str1, str2);
printf("Value = %d\n", strCompare(str1, str2));
freeStr(&str1, &str2);
system("pause");
return 0;
}