2015-03-05 4 views
1

Эй, ребята, я застрял в необычной ситуации. Это мой код, он отлично работает для возврата назад строки, но он дает результат с включением пробела, поэтому я не хочу, чтобы это пространство было включено в выход моей программы, поэтому у кого-то есть предложения об этом plz-share ... кстати, это мой код:Реверс строки с использованием рекурсии

#include <iostream> 

using namespace std; 

string reverse(string str, int size) { 
    if (size == -1) 
    return ""; 
    else 
    { 
     char a; 
     a = str[size]; 
     return a + reverse(str, size - 1); 
    } 
} 

int main() { 
    int size; 
    cout << "the size of the string : "; 
    cin >> size; 
    string str; 
    cout << "enter the word : "; 
    cin >> str; 
    cout << reverse(str, size); 
} 
+1

Я думаю, вам стоит потратить минуту, чтобы узнать [как форматировать сообщения с помощью Markdown или HTML] (http://stackoverflow.com/help/formatting) ... –

+1

Можете ли вы уточнить, в каком пространстве вы ссылаетесь? Лучше всего дать образец ввода и соответствующий выход образца. Кроме того, я бы предложил, чтобы вы окружали вывод одинарными кавычками, чтобы вы могли фактически сказать, где начинается и заканчивается строка. –

ответ

1

Изменение реализации функции reverse к следующему.

string reverse(string str ,int size){ 
    if (size==-1) 
     return ""; 
    else 
    { 
     char a; 
     a=str[size]; 
     if (' ' == a) 
      return reverse(str,size-1) 
     else 
      return a+reverse(str,size-1); 
    } 
} 

В качестве альтернативы, выполните предварительную обработку на входе.

+0

Например, если я даю ввод: «mohsin» вывод должен быть «nishom» и хорошо, что это нормально, он дает тот же результат, но включает в себя пространство перед выходом mohsin ............. –

+0

@MohsinMushtaq Кроме того, это C++. Класс 'string' имеет значение' length', которое вы можете использовать, не передавая размер. –

2

С тех пор как вы используете std::string, вам не нужно указывать размер строки, но используйте функции-членыили std::string::length(). Кроме того, a = str[size]; проблематично, когда size соответствует размеру строки, так как вы выполняете доступ без привязки (помните, что C++ использует индексирование с нулевой отметкой). Вы можете упростить код много, в конечном итоге с

#include <iostream> 
#include <cstddef> // for std::size_t 

using namespace std; 

string reverse(string str, std::size_t pos) { 
    return (pos == 0 ? "" : str[pos - 1] + reverse(str, pos - 1)); 
} 

int main() { 
    string str; 
    cout << "enter the word : "; 
    getline(cin, str); // allow for spaces in the string 
    cout << reverse(str, str.size()) << endl; 
} 

Здесь, вместо того, чтобы использовать cin >> str, я использовал getline(cin, str), так как cin читает до первого пробела, в то время как getline позволяет читать string сек, что с указанной пространства.

+0

VSOFTCO thankx много проблема разрешен ....... –

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