책과 다르게 코딩 해봄..
아래의 코드는 입력 받은 문자열과 비교 문자열이 모두 NULL 문자를 가질때까지 비교하므로
책의 소스보다 처리 속도면에서 떨어짐
참고 : scanf()는 공백문자를 입력 하지 못하므로 한단어만 비교 가능!!!
=================================================
#include <stdio.h>
#include <string.h>
#define SKY "sky"
int My_strcmp(const char*, const char*);
int main(void)
{
char string[100];
int ret;
printf("영단어를 입력한 후 Enter키를 치세요\n");
printf("sky를 입력하면 프로그램이 종료됩니다.\n");
do{
scanf("%s",string);
ret = My_strcmp(string,SKY);
if(ret == 0){
printf("%s == %s, ret = %d\n", string,SKY,ret);
break;
}else if(ret < 0){
printf("%s < %s, ret = %d\n", string,SKY,ret);
}else{
printf("%s > %s, ret = %d\n", string,SKY,ret);
}
}while(1);
return 0;
}
int My_strcmp(const char* string1, const char* string2)
{
if(*string1 == (int)NULL && *string2 == (int)NULL) return 0;
do{
if(*string1 < *string2){
return -1;
}else if(*string1 > *string2){
return 1;
}
string1++;
string2++;
}while(!(*string1 == '\0' && *string2 == '\0'));
return 0;
=================================================
책에 나와 있는 소스
=================================================
#include <stdio.h>
#include <string.h>
#define SKY "sky"
int My_strcmp(const char*, const char*);
int main(void)
{
char string[100];
int ret;
printf("영단어를 입력한 후 Enter키를 치세요\n");
printf("sky를 입력하면 프로그램이 종료됩니다.\n");
do{
scanf("%s",string);
ret = My_strcmp(string,SKY);
if(ret == 0){
printf("%s == %s, ret = %d\n", string,SKY,ret);
break;
}else if(ret < 0){
printf("%s < %s, ret = %d\n", string,SKY,ret);
}else{
printf("%s > %s, ret = %d\n", string,SKY,ret);
}
}while(1);
return 0;
}
int My_strcmp(const char* string1, const char* string2)
{
if(*string1 == (int)NULL && *string2 == (int)NULL) return 0;
while(*string1 != (int)NULL){
if(*string2 == (int)NULL){
return 1; // string1 문자가 string2보다 더 길다
}
if(*string1 == *string2){
// *string1의 문자와 *string2의 문자가 같으므로 다음문자 비교
string1++;
string2++;
continue; // 반복문의 조건문으로 이동
}
if(*string1 < *string2) return -1;
else return 1;
}
if(*string2 != (int)NULL) return -1;
return 0;
}
=================================================
아래의 코드는 입력 받은 문자열과 비교 문자열이 모두 NULL 문자를 가질때까지 비교하므로
책의 소스보다 처리 속도면에서 떨어짐
참고 : scanf()는 공백문자를 입력 하지 못하므로 한단어만 비교 가능!!!
=================================================
#include <stdio.h>
#include <string.h>
#define SKY "sky"
int My_strcmp(const char*, const char*);
int main(void)
{
char string[100];
int ret;
printf("영단어를 입력한 후 Enter키를 치세요\n");
printf("sky를 입력하면 프로그램이 종료됩니다.\n");
do{
scanf("%s",string);
ret = My_strcmp(string,SKY);
if(ret == 0){
printf("%s == %s, ret = %d\n", string,SKY,ret);
break;
}else if(ret < 0){
printf("%s < %s, ret = %d\n", string,SKY,ret);
}else{
printf("%s > %s, ret = %d\n", string,SKY,ret);
}
}while(1);
return 0;
}
int My_strcmp(const char* string1, const char* string2)
{
if(*string1 == (int)NULL && *string2 == (int)NULL) return 0;
do{
if(*string1 < *string2){
return -1;
}else if(*string1 > *string2){
return 1;
}
string1++;
string2++;
}while(!(*string1 == '\0' && *string2 == '\0'));
return 0;
=================================================
책에 나와 있는 소스
=================================================
#include <stdio.h>
#include <string.h>
#define SKY "sky"
int My_strcmp(const char*, const char*);
int main(void)
{
char string[100];
int ret;
printf("영단어를 입력한 후 Enter키를 치세요\n");
printf("sky를 입력하면 프로그램이 종료됩니다.\n");
do{
scanf("%s",string);
ret = My_strcmp(string,SKY);
if(ret == 0){
printf("%s == %s, ret = %d\n", string,SKY,ret);
break;
}else if(ret < 0){
printf("%s < %s, ret = %d\n", string,SKY,ret);
}else{
printf("%s > %s, ret = %d\n", string,SKY,ret);
}
}while(1);
return 0;
}
int My_strcmp(const char* string1, const char* string2)
{
if(*string1 == (int)NULL && *string2 == (int)NULL) return 0;
while(*string1 != (int)NULL){
if(*string2 == (int)NULL){
return 1; // string1 문자가 string2보다 더 길다
}
if(*string1 == *string2){
// *string1의 문자와 *string2의 문자가 같으므로 다음문자 비교
string1++;
string2++;
continue; // 반복문의 조건문으로 이동
}
if(*string1 < *string2) return -1;
else return 1;
}
if(*string2 != (int)NULL) return -1;
return 0;
}
=================================================