使用char *和string类反向字符串

时间:2015-09-03 12:15:51

标签: c++ string

我尝试通过指针行走来反转字符串。逻辑很简单,我有两个指向char的指针if(null == salt) generateHashFromServer(mPaymentParams); else generateHashFromSDK(mPaymentParams, intent.getStringExtra(PayuConstants.SALT)); 指向字符串的第一个字符。另一个head指向字符串的倒数第二个字符(在tail之前)。然后交换char-by-char。 C风格它运作良好,但C ++风格不起作用。我不知道它的原因。

C风格

\0

C ++ - 风格

#include <iostream>
#include <cstring>
using std::cin;
using std::cout;
using std::endl;
using std::string;

void reverse(char *str)
{
    char *tail, *head;
    head = &str[0];
    tail = &str[strlen(str)];

    cout << "String inverted is: ";

    while ((head!=tail)&&(head!=--tail))
    {
        char temp=*head;
        *head++=*tail;
        *tail=temp;
    }
}

int main(int argc, char const *argv[])
{
    char str[100];
    cout << "Enter a string: ";
    cin.getline(str,100);
    reverse(str);
    cout << str;
    cout <<"\n";

    return 0;
}

1 个答案:

答案 0 :(得分:4)

您没有通过引用将字符串传递给reverse。 您当前正在传递该字符串的副本。

make reverse有这个原型:

void reverse(string& str)