Как я создаю случайную алфавитно-цифровую строку в C++?

В netbeans 8.1 я сделал, чтобы включить папку значков и других изображений, называемых ресурсами внутри папки src в файле проекта. Поэтому всякий раз, когда я создаю Jar-файл, туда входит папка. Дерево файлов должно быть таким:

  • src (файлы Java в исходных пакетах здесь)
  • ** ПАКЕТ, ВЫ НАИМЕНЕНО В ПРОЕКТЕ ** file.java
  • Ресурсы image.jpg

Код должен выглядеть следующим образом:

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
164
задан jm. 13 January 2009 в 18:16
поделиться

4 ответа

Mehrdad Afshari ответ добился бы цели, но я нашел его немного слишком подробным для этой простой задачи. Таблицы поиска могут иногда делать чудеса:

void gen_random(char *s, const int len) {
    static const char alphanum[] =
        "0123456789"
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        "abcdefghijklmnopqrstuvwxyz";

    for (int i = 0; i < len; ++i) {
        s[i] = alphanum[rand() % (sizeof(alphanum) - 1)];
    }

    s[len] = 0;
}
266
ответ дан Community 4 November 2019 в 16:54
поделиться
 void gen_random(char *s, size_t len) {
     for (size_t i = 0; i < len; ++i) {
         int randomChar = rand()%(26+26+10);
         if (randomChar < 26)
             s[i] = 'a' + randomChar;
         else if (randomChar < 26+26)
             s[i] = 'A' + randomChar - 26;
         else
             s[i] = '0' + randomChar - 26 - 26;
     }
     s[len] = 0;
 }
15
ответ дан Community 4 November 2019 в 16:54
поделиться

Я склонен всегда использовать структурированный C++ пути к этому виду инициализации. Заметьте, что существенно, это не отличается, чем решение Altan. Программисту на C++ это просто выражает намерение немного лучше и могло бы быть более легким портативным устройством к другим типам данных. В этом экземпляре, функция C++ generate_n экспрессы точно, что Вы хотите:

struct rnd_gen {
    rnd_gen(char const* range = "abcdefghijklmnopqrstuvwxyz0123456789")
        : range(range), len(std::strlen(range)) { }

    char operator ()() const {
        return range[static_cast<std::size_t>(std::rand() * (1.0 / (RAND_MAX + 1.0 )) * len)];
    }
private:
    char const* range;
    std::size_t len;
};

std::generate_n(s, len, rnd_gen());
s[len] = '\0';

Между прочим, читайте эссе Julienne’s на том, почему это вычисление индекса предпочтено по более простым методам (как взятие модуля).

8
ответ дан Konrad Rudolph 4 November 2019 в 16:54
поделиться

Я просто протестировал это, это работает сладкое и не требует таблицы поиска. rand_alnum () вид вытесняет буквенно-цифровой индикатор, но потому что это выбирает 62 из возможных 256 символы, это не грандиозное предприятие.

#include <cstdlib>   // for rand()
#include <cctype>    // for isalnum()   
#include <algorithm> // for back_inserter
#include <string>

char 
rand_alnum()
{
    char c;
    while (!std::isalnum(c = static_cast<char>(std::rand())))
        ;
    return c;
}


std::string 
rand_alnum_str (std::string::size_type sz)
{
    std::string s;
    s.reserve  (sz);
    generate_n (std::back_inserter(s), sz, rand_alnum);
    return s;
}
9
ответ дан nly 4 November 2019 в 16:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: