2012-07-15 4 views

답변

2

당신의 문제는 문자 값 0이 A.에 매핑되어 있지 않다는 것입니다. 오히려 A로 인쇄 될 문자는 65와 같습니다. 필요한 경우 전체 테이블 here을 볼 수 있습니다.

어쨌든, 코드 솔루션은 간단합니다. 대신

cout<<letter[i]<<" "; 

의 당신은 할 수 있습니다 :

cout<<letter[i]+'A'-1<<" "; 

을 (-1 당신이 25 대신 0 O를 26 일에서 문자 번호가 있기 때문이다).

+0

예, 여기에는 전혀 필요없는 + 1이 없으면 더 깔끔합니다. –

+0

나는 당신의 방법을 시도했다, 저에게 재미 있은 특성을주지 않는다 그러나 그것은 알파벳으로 그 (것)들을 표시하는 방법 번호 65- 90를 주는가? – newbieprogrammer

+0

@ user1526669 : -1이 없으면 작동합니다. 현재는 모든 것을 정수로 변환합니다 (문자가 정수로 승격 됨). 따라서 + -1을 제거하거나 다음과 같이하십시오. (글자 [i] + 'A'-1) << ... –

7

C++에서 "shuffle"하는 방법에 대한 답은 표준 라이브러리의 셔플 링 알고리즘 중 하나를 사용하는 것입니다. 그것을 할 수있는 쉬운 방법은 std::string에 넣어, 그리고 std::random_shuffle을 사용 :

std::string s = "abcdef ...." ; 
std::random_shuffle(s.begin(), s.end()); 

당신은 배열 함께 할 수도 있습니다 : 여기

char letters[] = {'a', 'b', ..... }; 
std::random_shuffle(letters, letters+26); 
+0

이 방법을 사용하면 셔플이 고정되어 있습니까? 프로그램을 반복하지 않고 다른 셔플을 생성하고 싶습니다. – newbieprogrammer

+0

@ user1526669 그것은 고정 될 것이지만 난수 생성에 사용되는 시드에 대한 핸들을 가질 수 있으므로 프로그램을 실행할 때마다 다른 키를 생성하기 위해 날짜 나 기타와 같은 것을 사용할 수 있습니다. 문서 [여기] (http://en.cppreference.com/w/cpp/algorithm/random_shuffle)는 더 많은 단서를 제공해야합니다. – juanchopanza

0
const char chars[] = "abcdef ...."; 
char result[...]; 
memcpy(result, chars, sizeof(chars)); 
for (unsigned i = 0; i < (sizeof(chars)-1); ++i) { 
    unsigned j = rand() % sizeof(chars); 
    char tmp = result[j]; 
    result[j] = result[i]; 
    result[i] = tmp; 
} 

STL을 사용하는 경우 std :: random_shuffle이 좋습니다.