如何打印带有非重复字母的随机字符串? 我试图编写一个C++程序,用非重复字母从AZ(ASCII代码97到122)打印随机10个字母串。我写的这段代码有时运行得很完美,但大多数时候while循环无限运行。 问题出在哪里

如何打印带有非重复字母的随机字符串? 我试图编写一个C++程序,用非重复字母从AZ(ASCII代码97到122)打印随机10个字母串。我写的这段代码有时运行得很完美,但大多数时候while循环无限运行。 问题出在哪里,c++,C++,(编辑:在开始时设置flag=0可修复问题) void randomstring() {int i,j,flag=1; 字符x,s[20]=“”; srand(时间(0)); 对于(i=0;i(当前,如果发现重复字符,循环将不会终止。)但除此之外,代码还有其他几个原因: 您假设的是ASCII编码,该标准不保证这一点 替换采样可能会导致循环问题,也可能造成统计异常(尽管对于原始生成器,如rand(),这些情况不会比生成器本身更糟) 一个解决办法是写 chars[]={'a','b','c',…/*

(编辑:在开始时设置flag=0可修复问题)

void randomstring()
{int i,j,flag=1;
字符x,s[20]=“”;
srand(时间(0));
对于(i=0;i(当前,如果发现重复字符,循环将不会终止。)但除此之外,代码还有其他几个原因:

  • 您假设的是ASCII编码,该标准不保证这一点

  • 替换采样可能会导致循环问题,也可能造成统计异常(尽管对于原始生成器,如
    rand()
    ,这些情况不会比生成器本身更糟)

  • 一个解决办法是写

    chars[]={'a','b','c',…/*ToDo-键入所有其他字母*/,'z'}

    并使用

    std::random_shuffle(std::begin(s), std::end(s));
    
    并读出
    s

    的前10个元素(当前,如果发现重复字符,循环将不会终止)。但除此之外,代码令人讨厌还有几个其他原因:

  • 您假设的是ASCII编码,该标准不保证这一点

  • 替换采样可能会导致循环问题,也可能造成统计异常(尽管对于原始生成器,如
    rand()
    ,这些情况不会比生成器本身更糟)

  • 一个解决办法是写

    chars[]={'a','b','c',…/*ToDo-键入所有其他字母*/,'z'}

    并使用

    std::random_shuffle(std::begin(s), std::end(s));
    

    然后读取
    s

    的前10个元素,一旦标志设置为2,它就会被卡住。你应该在while循环中将标志重置为1。

    一旦标志设置为2,它就会被卡住。你应该在while循环中将标志重置为1。

    使用分步调试使用分步调试你能解释一下为什么循环没有终止吗当发现重复项时,请解释为什么循环在发现重复项时不终止?