获取String参数并将其反转为C ++的函数

时间:2015-03-24 10:31:59

标签: c++

我想创建一个接受字符串参数的函数,将其反转并返回反转的字符串。有一些答案,但都没有完全奏效。 这是我的代码:

#include <iostream>
#include <string>

using namespace std;


string revStr(string word){

    string reversed = "";

    if(word.size() == 0)
    {
        return reversed;
    }

    for (int i = word.length()-1; i>=0; i--){
        reversed = reversed+word[i];
    }

    return reversed;
}

int main(){
string strin;
cout << "enter string;" << endl;
cin>> strin;
cout << revStr(strin);
}

这仅适用于不包含空格的字符串。当我输入Hello World时,它会返回olleH。

4 个答案:

答案 0 :(得分:4)

basic_string::operator>>

  

2)表现为FormattedInputFunction。在构造和检查可能跳过前导空格的哨兵对象之后,首先使用str清除str.erase(),然后从中读取字符并将其附加到str,就像str.append(1, c)一样,直到满足下列条件之一: [...]

     

std::isspace(c,is.getloc())对于is中的下一个字符c为真(此空白字符保留在输入流中)

您按定义使用的方法会读取空白区域,因此您只能将Hello读入strin。您应该使用其他方法进行阅读,例如getlinestringstream

答案 1 :(得分:3)

您需要使用std::getline输入带空格的字符串。

要撤销std::string,请考虑使用std::reverse中的<algorithm>,尽管您的算法也是正确的。

代码:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
    string strin;
    cout << "enter string;" << endl;
    getline(cin,strin);
    reverse(strin.begin() , strin.end() );
    cout << strin;
}

答案 2 :(得分:2)

请参阅,cin在任何空格或换行符出现时停止输入。因此,要输入带空格的字符串,您必须使用cin.getline(),这可以通过使用以下代码段来完成:

string S;
cin.getline(1000,'\n');

这会将输入直到换行符转换为string S然后我们只需要反转字符串,这可以通过两种方式完成。

方法1:

使用std::reverse头文件中的<algorithm>。此函数适用于所有容器,并将迭代器作为参数。

#include <bits/stdc++.h>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    string S;
    getline(cin,S);
    reverse(S.begin(), S.end());
    return 0;
}   

方法2:

您可以创建一个功能,在与结尾等距离的位置交换字符,然后在O(n)时间复杂度中获得所需的内容。

#include <bits/stdc++.h>

using namespace std;

string myfunc(string S)
{
    int l = 0;
    int r = S.size()-1; 
    while(l<r)
    {
        swap(S[l],S[r]);
        l++;
        r--;
    }
    return S;
}

int main()
{
    ios_base::sync_with_stdio(false);
    string S;
    getline(cin,S);
    S = myfunc(S);
    cout<<S;
    return 0;
}   

答案 3 :(得分:2)

我认为您可以使用revStr()做得很好,但是您需要获得整行输入,但使用cin会将空格视为分隔符,因此您只能获得Hello超出Hello World

cin >> strin替换为getline(cin,strin)