문자열 비교..
글쓴이: typ / 작성시간: 월, 2003/11/03 - 12:43오전
string 관련 함수(strlen, strcmp 등등)을 사용하지 않고,
문자열을 받아 비교하는 프로그램을 만들려 합니다.
문자열을 비교한후 정렬을 해야 하는데, 자꾸 에러가 나는구요 ㅜㅜ
일단 코드를 올립니다. 여기서 case sort : 부분에서
두 문자열을 순서를 swap 하는 부분만 좀 잡아주시면 고맙겠습니다.
#include <stdio.h>
#include <string.h>
#define nmax 21
#define read 1
#define sort 2
#define find 3
#define exit 4
#define true 5
#define false 6
void main()
{
char keycode;
char word[100][nmax];
char *tempword;
int phase=0, i, j,n, low, high, mid;
int word_count = 0;
int menu, found;
int n_student = 0;
int num_char=0;
do {
printf("\n\t 단어 찾기 프로그램 \n");
printf("\n1. 단어 정보 입력 \n");
printf("\n2. 단어 정렬 \n");
printf("\n3. 단어 찾기/출력 \n");
printf("\n4. 종료 \n");
printf("\n\n\t 메뉴 항목을 입력하시오.\n");
scanf("%d", &menu);
switch (menu)
{
case read:
printf("\n\t 입력할 단어수?");
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("\n\t word=");
scanf(" %s", word + i);
n_student++;
printf("result: %s", word+i);
}
break;
case sort:
for (phase=1;phase<n_student;phase++)
{
for (i=0;i<n_student-phase;i++)
{
while( *(*(word+i)+num_char) != '\0')
num_char++;
printf("num_char : %d\n", num_char);
/************************************
* 이부분이 스왑부분입니다.!!!!!!!!!!!!!!!!!!!!!!!!
************************************/
for(j=0 ; j< num_char; j++) {
printf(" %c , %c\n", *(*(word+i) + j), *(*(word+i+1)+ j));
if(*(*(word+i) + j) > *(*(word+i+1)+ j))
{
tempword = &word[i];
&word[i] = &word[i+1];
&word[i+1] = tempword;
break;
}
}
}
}
// for(i=0; i<n_student; i++)
// printf(" %c\n", *(*(word+i) + 1));
// for(i=0; i<n_student; i++)
// printf(" %s\n", word + i);
// for(i=0; i<n_student; i++)
// printf(" %s\n", word[i]);
break;
case find:
printf("\n enter the word to find=");
while (scanf("%c", keycode) == 1){
low=0;
high = nmax+1;
found = false;
while (!found && low<=high){
mid=(low+high)/2;
if (word[mid]==keycode)
found=true;
else if (word[mid]>keycode)
high=mid-1;
else
low=mid+1;
}
if (found)
printf("%dth word is %s f\n", i+1, word[mid]);
else
printf("%dth word cannot found in the list. \n", i+1);
printf("\n enter keycode=");
}
break;
}
} while (menu!=exit);
}Forums:


[code:1]&word[i] = &word
char tempword[nmax];
strncpy(tempword, &word[i][0], strlen(&word[i][0]));
strncpy(&word[i][0], &word[i+1][0], strlen(&word[i+1][0]));
strncpy(&word[i+1][0], tempword, strlen(tempword));
'='이 복사(memcpy)를 하는 컴파일러가 존재하는것 같더군요.
어째든 tempword의경우는 공간이 필요하게 됩니다.
참고로 상수를 정의할때는 대문자를 많이 사용합니다. 참고하세요.
#define nmax 21 -> #define NMAX 21
그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.
댓글 달기