Спасибо всем за помощь. Ниже этого поста я поместил исправленные версии обоих скриптов, которые теперь дают одинаковый результат.
Здравствуйте,
Я написал небольшой скрипт генерации грубой строки на python, чтобы сгенерировать все возможные комбинации алфавита в пределах заданной длины. Это работает довольно хорошо, но по той причине, что я не хочу, чтобы это было быстрее, я пытаюсь перенести его на C ++.
Проблема в том, что мой код C ++ создает слишком много комбинаций для одного слова.
Вот мой пример в Python:
./test.py
дает мне
aaa
aab
aac
aad
aa
aba
....
, в то время как ./test
(мне дает программа на С ++)
aaa
aaa
aaa
aaa
aa
Здесь я также получаю все возможные комбинации, но получаю их вдвое чаще.
Вот код для обеих программ:
#!/usr/bin/env python
import sys
#Brute String Generator
#Start it with ./brutestringer.py 4 6 "abcdefghijklmnopqrstuvwxyz1234567890" ""
#will produce all strings with length 4 to 6 and chars from a to z and numbers 0 to 9
def rec(w, p, baseString):
for c in "abcd":
if (p<w - 1):
rec(w, p + 1, baseString + "%c" % c)
print baseString
for b in range(3,4):
rec(b, 0, "")
А вот код C ++
#include <iostream>
using namespace std;
string chars="abcd";
void rec(int w,int b,string p){
unsigned int i;
for(i=0;i<chars.size();i++){
if(b < (w-1)){
rec(w, (b+1), p+chars[i]);
}
cout << p << "\n";
}
}
int main ()
{
int a=3, b=0;
rec (a+1,b, "");
return 0;
}
Кто-нибудь видит мою ошибку? У меня нет большого опыта работы с C ++.
Спасибо, действительно
Вот исправленная версия:
C ++
#include <iostream>
using namespace std;
string chars="abcd";
void rec(int w,int b,string p){
unsigned int i;
for(i=0;i<chars.size();i++){
if(b < (w)){
rec(w, (b+1), p+chars[i]);
}
}
cout << p << "\n";
}
int main ()
{
rec (3,0, "");
return 0;
}
Python
#!/usr/bin/env python
import sys
def rec(w, b, p):
for c in "abcd":
if (b < w - 1):
rec(w, b + 1, p + "%c" % c)
print p
rec(4, 0, "")
Равный вывод:
$ ./test > 1
$ ./test.py 3 3 "abcd" "" > 2
$ diff 1 2
$