2010-06-14 2 views
0

Итак, у меня есть код на C++, который должен инвертировать аргументы в векторе, но не в последовательности. В приведенном ниже коде я перечислил свои проблемы как побочные эффекты. Функция инвертной должна инвертировать каждый аргумент, а затем основная функция просто выводит инвертированные слова в том порядке, Так, например, программу («один два три четыре») = ruof eerth OWT EnoПрограмма не будет компилировать

#include <iostream> 
#include <string> 
using namespace std; 

int invert(string normal) 
{ 
    string inverted; 
    for (int num=normal.size()-1; num>=0; num--) 
    { 
     inverted.append(normal[num]); //I don't know how to get each character 
              //I need another command for append 
    } 
    return **inverted**; <---- 
} 

int main(int argc, char* argv[]) 
{ 
    string text; 
    for (int a=1; a<argc; a++) 
    { 
     text.append(invert(argv[a])); //Can't run the invert function 
     text.append(" "); 
    } 
    cout << text << endl; 
    return 0; 
} 

ответ

3

проблема заключается в том, что normal[num] является персонажем. append() не имеет перегрузки для символов.

Вы можете использовать inverted.push_back(normal[num]);

См string API.

Я хотел бы добавить несколько других заметок:

0) Почему вы возвращения int из invert()? inverted является строкой, так что вы должны вернуть строку:

`string invert(string normal);` 

1) Вместо того чтобы использовать num для перебора, вы можете использовать reverse_iterators:

for (string::reverse_iterator c = normal.rbegin(); c!=normal.rend(); ++c) { 
    inverted.push_back(*c); 
} 

2) При прохождении строк в функции, которые не изменяются в функции, вы должны пройти по ссылке, чтобы избежать лишних строковых копий.

string invert(const string &normal); 

3) Вы обход 0..argc, поэтому ваши обратные строки будут в обратном направлении от того, что, как ожидается, если я правильно понимаю ваши требования правильно.

Смежные вопросы