2010-09-25 4 views
-1
char * recursivecombo(char *str, int choices, int level) 
{ 
    int len = strlen(str); 

    level++; 
    if(level == choices) 
    { 
      for (int i = 0; i < len -2; i++) 

      { 

        printf("%c", str[i]) ; 
      } 
    } 
    else 
    { 
     for (int i = 0; i < len - 2; i++) 
     { 
       printf("%c",str[i]); 
       recursivecombo(str.substr(1), level); 

     } 
    } 
} 

Я хочу использовать строку вместо char *.Как преобразовать этот код в строку

+1

Что такое str.substr? – Chubsdad

+2

Как вы можете сделать это str.substr (1) на char *? И вы ничего не возвращаете из этой функции. В Java это не будет скомпилировано, я не уверен, как C++ справляется с этим, но я бы предположил некоторые ошибки, по крайней мере. – InsertNickHere

+0

Почему вы хотите использовать строку? Является ли это значительно лучше (быстрее, меньше, удобочитаемо, портативно), чем этот код? – JoshD

ответ

4
std::string recursivecombo(const std::string& str, int choices, int level) 
{ 
    level++; 
    for (int i = 0; i < str.length() -2; ++i) 
    { 
     cout<<str.at(i) ; 
     if(level != choices) 
      recursivecombo(str.substr(1),8,/*Missing choce*/ level); 
    } 
/*Missing return value*/ 
} 

Это всего лишь макет с использованием строки. Некоторые проблемы с вашей функцией

1) Где ваше возвращаемое значение

2) Если вы собираетесь использовать использовать строку COUT, а не Printf, если это C++

3) Используйте префикс ++.

+0

Хорошее использование 'at (i)'. Обратите внимание, что 'i' и' 2' будут увеличены до 'unsigned long' в' i Potatoswatter

2

Как уже писал, вы не документировали возвращение, так что это будет эквивалентно код:

string recursivecombo(const std::string & str, int choices, int level) 
{ 
    what I wouldn't give for a holocaust cloak 
} 

Я думаю, что вы, вероятно, имел в виду:

void recursivecombo(const std::string & strInput, int nChoices, int nLevel = 0); 

реализован как:

void recursivecombo(const string & strInput, int nChoices, int nLevel /* = 0 */) 
{ 
    nLevel++; 
    if(nLevel == nChoices) cout << strInput.substr(0,strInput.length()-2); 
    else 
    { 
     for (int i = 0; i < str.length() - 2; i++) 
     { 
      cout << str.at(i); 
      recursivecombo(str.substr(1), nChoice, nLevel); 
     } 
    } 
} 
Смежные вопросы