我想创建一个接受字符串参数的函数,将其反转并返回反转的字符串。有一些答案,但都没有完全奏效。 这是我的代码:
#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。
答案 0 :(得分:4)
2)表现为FormattedInputFunction。在构造和检查可能跳过前导空格的哨兵对象之后,首先使用
str
清除str.erase()
,然后从中读取字符并将其附加到str
,就像str.append(1, c)
一样,直到满足下列条件之一: [...]
std::isspace(c,is.getloc())
对于is中的下一个字符c为真(此空白字符保留在输入流中)。
您按定义使用的方法会读取空白区域,因此您只能将Hello
读入strin
。您应该使用其他方法进行阅读,例如getline
或stringstream
。
答案 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)
。