2014-11-15 3 views
-2

Я пытаюсь изменить строку, но следующее НЕ работает. Вот мой I/O:Simple C++ String Reversal

Enter text to be reversed: 
>> Alex 
Reversed, it is: llex 

Вот мой код:

string Reversal(string name) { 

    for(double i = name.length() - 1 ; i >= 0; i--) { 
     int j = 0; 
     name[j] = name[i]; 
     j++; 
    } 
    return name; 
}; 


int main(int argc, const char * argv[]) { 

    string name; 
    cout << "Enter text to be reversed: " << endl; 
    cin >> name; 
    cout << "Reversed, it is: " << Reversal(name) << endl; 

    return 0; 
} 

Примечание: Это прекрасно работает, когда я использую функцию реверса, встроенный в библиотеку:

reverse(name.begin(),name.end()) 

Я просто хочу чтобы узнать, почему моя функция не будет работать. Я пытаюсь изменить строку без использования каких-либо дополнительных строк.

+1

Почему вы используете двойной в цикл –

+0

@EdHeal Он сказал, что потеря данных при использовании INT я, чтобы придать ему значение name.length(). Я просто использовал double, чтобы заткнуть предупреждение (OCD об этих желтых предупреждениях ха-ха). – Alok

+1

Добавьте 'cout << name << endl;' внутри цикла, и вы увидите, что происходит. – molbdnilo

ответ

1

Вы увеличиваете j в конце вашего цикла, но вы все равно устанавливаете его значение 0 в начале, поэтому вы всегда смотрите только на первый символ.

Другая проблема с вашим кодом заключается в том, что вы перезаписываете вторую половину своего массива при итерации с самого начала. Одним из решений этого является замена символов, когда вы идете и заканчиваете посередине.

Exapmle:

int j = 0; 
int i = name.length() - 1; 
while(i > j){ 
    char temp = name[j]; 
    name[j] = name[i]; 
    name[i] = temp; 
    j++; 
    i--; 
} 
+0

Да, я понимаю, насколько вопиющей была моя ошибка. Спасибо за вашу помощь! – Alok