2017-09-29 4 views
-1

논리적으로이 작업을 수행 할 생각이 없습니다. 정렬에 대한 모든 가능성을 배웠고 그것에 대한 알고리즘을 기반으로했습니다.3 문자열을 사전 적으로 C에서 조건문을 사용하여 정렬

ABC

ACB

BAC

BCA

CAB

CBA

그래서 3 문자열 및에서만 여섯 가능한 조합이 생각

그것은 매우 co와 함께 이것을 하드 코딩하는 빠르고 쉬운 솔루션 nditionals. 코드를 참조하십시오.

char str1[x]; // where x is some constant value 
    char str2[x]; 
    char str3[x]; 
    char temp[x]; 
    if (strcmp(str1, str2) > 0) 
    { 
    strcpy(temp, str1); 
    strcpy(str1, str2); 
    strcpy(str2, temp); 
    } 
    else if (strcmp(str2, str3) > 0) 
    { 
    strcpy(temp, str2); 
    strcpy(str2, str3); 
    strcpy(str3, temp); 
    } 
    else if (strcmp(str1, str3) > 0) 
    { 
    strcpy(temp, str1); 
    strcpy(str1, str3); 
    strcpy(str3, temp); 
    } 

본질적으로 예를 들어 ABC의 변형을 가져 와서 ABC로 정렬하고 싶습니다. 즉 BAC -> ABC, CAB -> ABC.

+1

1) 귀하의 질문은 무엇입니까 : Take a look here

여기에 문자열을 않는 작은 코드는? 2) 여러분이 말했듯이 여섯 가지 다른 가능성이 있지만 코드에는 네 가지 실행 경로 (블록의 경우 첫 번째, 두 번째, 세 번째 또는 아무도 실행되지 않음) 만 사용할 수 있습니다. 그건 좋은 징조가 아니야. – hobbs

+0

'else'가 필요 없다고 생각합니다. – dasblinkenlight

+1

'else'를 제거하면 CBA를 제외한 모든 것이 작동합니다. BCA – compute

답변

1

아주 가까이 있습니다. 가장 큰 문제는 else입니다. else if을 사용하면 if 블록을 실행할 수 있습니다. 즉, 코드를 실행할 수있는 경로가 네 개 있습니다. 첫 번째 블록이 실행되거나 두 번째 블록이 실행되거나 세 번째 블록이 실행됩니다. 또는 그들 중 아무도 실행되지 않습니다. 그러나 당신이 설명 할 여섯 가지 경우가 있다고 지적 했으므로, 그것은 정확할 수 없습니다.

둘째, 두 번째 및 세 번째 블록을 교환하면 해결할 수있는 약간의 주문 문제가 있습니다.

이러한 변경을 모두 수행하면 작동하는 것이 있어야합니다. 다음 필요한 경우, 당신은 가장 작은 값이 str1에서 끝나는 확인 만이 개 더 높은 값 (알 수없는 순서대로) str2str3에 남아 str1str3 교환, 필요한 경우 첫 str2str1를 교환함으로써. 그런 다음 str2을 필요에 따라 str3으로 바꾸면 올바른 순서로 정렬되므로 모든 것을 순서대로 정렬해야합니다.

+0

의미가 있습니다. – compute

0

문자열로 버블 정렬을 구현하려고합니까?

#include <stdio.h> 
#include <string.h> 

#define strSize 20 
int main() { 
    char strings[][strSize] = {"CBA", "CAB", "BCA", "BAC", "ACB", "ABC"}; 
    char tmp[strSize]; 
    size_t len = sizeof(strings)/sizeof(strings[0]); 
    for (size_t j = 1; j < len; ++j) { 
    for (size_t i = 1; i < len; ++i) { 
     strcpy(tmp, strings[i - 1]); 
     if (strcmp(strings[i], tmp) < 0) { 
     strcpy(strings[i - 1], strings[i]); 
     strcpy(strings[i], tmp); 
     } 
    } 
    } 

    for (size_t i = 0; i < len; ++i) { 
    printf("%s ", strings[i]); 
    } 
}