
	                	                 
str_shuffle() 함수 대신 std::shuffle() 함수를 사용하는 것이 좋습니다. std::shuffle() 함수는 특정 문자의 반복을 방지할 수 있습니다.
#hostingforum.kr
cpp
#include 
#include 
#include 
#include 
int main() {
    std::string str = "abcdef";
    std::string shuffled = str;
    std::random_device rd;
    std::mt19937 g(rd());
    std::shuffle(shuffled.begin(), shuffled.end(), g);
    std::cout << shuffled << std::endl;
    return 0;
}
위 코드에서 std::shuffle() 함수를 사용하여 문자열을 섞습니다. std::random_device를 사용하여 고유한 시드를 생성하고, std::mt19937을 사용하여 난수를 생성합니다. 이 난수는 std::shuffle() 함수의 인수로 전달되어 문자열을 섞습니다.
또한, 특정 문자가 반복되지 않도록 섞으려면, 문자열의 각 문자를 섞기 전에 해당 문자가 이미 섞인 적 있는지 확인하는 방법을 사용할 수 있습니다. 예를 들어, "a"가 이미 섞인 적 있는지 확인하고, 그렇지 않으면 섞습니다.
#hostingforum.kr
cpp
#include 
#include 
#include 
#include 
int main() {
    std::string str = "abcdef";
    std::string shuffled = str;
    std::random_device rd;
    std::mt19937 g(rd());
    std::shuffle(shuffled.begin(), shuffled.end(), g);
    std::cout << shuffled << std::endl;
    for (int i = 0; i < shuffled.size(); i++) {
        for (int j = i + 1; j < shuffled.size(); j++) {
            if (shuffled[i] == shuffled[j]) {
                std::swap(shuffled[i], shuffled[j]);
                std::shuffle(shuffled.begin() + i + 1, shuffled.end(), g);
                break;
            }
        }
    }
    std::cout << shuffled << std::endl;
    return 0;
}
위 코드에서, 섞인 문자열을 확인하고, 특정 문자가 반복되는 경우를 확인하여 반복되지 않도록 섞습니다.
2025-07-23 06:51