Если я не совсем ошибаюсь, вы пытаетесь сгенерировать все возможные строки длины <=N
.
Самый простой способ сделать это - сопоставить это скакие числа генерируются, то есть путем добавления 1 к числу, чтобы получить следующий номер.Так что в основном начните с "a"
, затем добавьте 1 к нему, чтобы получить "b"
и так далее до "z"
.Теперь добавление 1 к этому вызовет перенос, поэтому сгенерируйте "aa"
, а затем "ba"
и так до тех пор, пока "za"
не станет "ab"
.
Вы можете значительно упростить это, если сможете отобразитьнатуральное число в строку.Чтобы получить строку, просто сделайте это:
string getString(int val) {
string str = "";
while (val>=0) {
int rem = val%26; // as there are 26 characters in english
str = str + charToString('a'+rem);
val /= 26;
}
return str;
}
Теперь просто вызовите эту функцию, чтобы получить строки:
void listStrings(int N) {
int max = 26^N-1;
string str;
for(int i=1; i<=max; ++i) {
str = getString(i);
doSomething(str); // maybe print it or store in file
}
}
Надеюсь, это поможет вам.