C++随机字符

C++ random char

本文关键字:字符 随机 C++      更新时间:2023-10-16

我正在尝试生成这样的随机字符:

char* test = "myname" + GenerateRandomChar();

我试着在不使用字符串的情况下完成它。所以请不要说使用字符串。感谢

如果您正在编写c代码(看起来是这样),那么就执行

char buff[8]; //sizeof("myname") + 1 + 1
sprintf(buff,"myname%c", GenerateRandomChar());

我假设GenerateRandomChar存在并工作于

试试这样的东西:

char[] test = "myname"; // note char[] instead of char*
test[6] = GenerateRandomChar();

char GenerateRandomChar()
{
    return (char) (random(127-33) + 33);
}

您可以向缓冲区添加sizeof,使其与字符长度无关:

#include <cstdio>
#include <iostream>
char getRandomChar(){
    static char c = 'A' + rand()%24;
    return c;    
    }
int main ()
{
    srand((unsigned)time(0));
    char str[] = "test";
    char buffer[sizeof(str)+1];
    char rnd = getRandomChar();
    sprintf(buffer, "%s%c",str,rnd);
    std::cout << buffer << std::endl;
}

请注意,getRandomChar()函数只提供大写字母。如果你想要小写的话,你需要把它写得更精致一点。

这个解决方案假设您在编译时知道初始字符串的大小。

当前的代码不正确,原因有两个:

  1. 您正在执行从const char*char*的不推荐使用的转换。它不应该编译
  2. 您正在执行指针运算,而不是串联运算

以下表达式:

"myname" + c

其中c是某些char不执行级联,而是执行指针运算。类似于:

char *ptr = "myname";
char c = ' '; // ASCII equivalent is 32
int n = (int) c;
char *s = ptr + n; // s now points out of bounds of ptr

如果您坚持执行C风格的代码,那么您需要使用标准库函数strcpy,可能还有strcat。示例:

#include <cstdlib>
#include <cstring>
#include <iostream>
char foo() {
  // return a random character here
}
int main() {
  const char* myname = "myname";
  // enough room to contain new character
  // and null terminator
  char* buffer = new char[strlen(myname) + 2];
  // strcpy includes the null terminator
  strcpy(buffer, myname);
  // We overwrite myname's null terminator
  buffer[strlen(myname)] = foo();
  buffer[strlen(myname) + 1] = '';
  std::cout << buffer;
  delete[] buffer;
}