프로그래밍

 3198, 1/160 회원가입  로그인  
   xkdlrjxkdltm
   [C언어]이거해석부탁

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3103 [복사]


int compare(char str1[], char str2[]);

int main()
{
char str1[100],str2[100];
int ans;

printf("1번째 문자열을 입력하시요\n",str1);
이부분에서 str1을왜부처요?
scanf("%s", str1);
printf("2번째 문자열을 입력하시요\n",str2);
scanf("%s", str2);


ans = compare(str1, str2);

if(ans ==1){
printf("두 문자열이 같다\n");
}
else
{
printf("두문자열은 다르다\n");
}
return 0;
}
이밑으로 다해석좀 부탁드립니다
int compare(char str1[], char str2[])
{
int i;
for(i=0; str1[i] ==str2[i];i++){
if(str1[i] == '\0'){
return 1;
}
}
return -1
}


  Hit : 4649     Date : 2011/07/25 10:19



    
메버리키 int compare(char str1[], char str2[]) // compare이라는 함수를 정의
{
int i; // 변수 i 선언하고 (루프때문에)
for(i=0; str1[i] ==str2[i];i++){ // for(초기값0,str1[i] 가 str[i] 와 같지않을때까지;i에다가 1씩증가한다
if(str1[i] == '\0'){ // 아마토 \0이 널값(문자열의 끝)을 나타내는말일텐데 str[i]가 null일때까지 그러니까 계속 비교하다가 끝이라는게나왔으면 지금까지 str1[i] 와 str2[i] 가같으므로 동일한 글자다 라는 생각으로 만든것같습니다.
return 1; 동일한글자라면 1값을 리턴
}
}
return -1 다르다면 -1 값을리턴(for 문에서 튕겨져나오면 -1값 리턴)
}
2011/07/26  
메버리키 그런데 이런 식이면
str1 으로 Apple 라고넣고 str2로 Apple is ggggoooooooooddddd 이라고 써도 같은문자열이라고 할것같네요
이럴땐 strcmp함수 를 사용해서 리턴값이 0 이면 같은 문자열이다 를사용하는게 좋을것같아요
2011/07/26  
xkdlrjxkdltm 메버리키님 함수를 사용하라는말도 맛지만 저도그함수를 배웠습니다 두문자열를 비교하는 함수죠?
그정도는 암 하지만 연습무제에서 저함수말고 이함수를 사용하라해서 그런겁니다
그리고 phpmyadmin님이볼때 괜히 저함수로 하고싶었을까요? 저도 strcmp함수 (문자열을 비교하는함수)을사요하지 이함수로 하지말라는데 어쩌라는 말임?
그리고 for(i=0; str1[i] ==str2[i];i++){
if(str1[i] == '\0'){
return 1;
}
이부분 리턴으로 끝나면 for문도 같이끝나나요 이러면 이해가 안되는데 좀...
1111\0
11111\0
둘다 맛다고 나오는거아님?
2011/07/27  
profreez 둘다 맞다고 나오겠네요.

직접 한번 strcmp를 구현해보시는것도 좋은 공부 방법입니다.
2011/07/27  
endosymbiosis /* 문자열 비교함수 구현 */
int mystrcmp(const char* s1, const char* s2)
{
int i, no1, no2;
for(i=0; s1[i]!='\0' || s2[i]!='\0';i++)
{
no1=(int)s1[i];
no2=(int)s2[i];

if(no1==no2)
{
if(s1[i]!='\0' && s2[i]!='\0')
continue;
else if(s1[i]!='\0')
return 1;
else if(s2[i]!='\0')
return -1;
else
continue;
}
else
{
if(no1>no2)
return 1;
else
return -1;
}
}
return 0;
}
2011/07/29