提问人:Suraj Kumar 提问时间:5/7/2022 最后编辑:Vlad from MoscowSuraj Kumar 更新时间:5/7/2022 访问量:176
如何在不使用内置函数的情况下编写 c++ 代码来反转字符串?
How to write c++ code to reverse a string without using inbuilt function?
问:
我已经写了这个代码。它没有显示任何错误,但字符串没有被反转,请让我知道我在哪里犯了错误? 我正在使用代码块编写代码和 GCC 编译器。我创建了两个函数 reverseString 和 printString,printString 函数正在工作,但 reverseString 不起作用。我能做些什么?
#include <iostream>
#include<string>
using namespace std;
void reverseString(string s, int iNode, int lNode){
while(iNode < lNode){
char temp = s[iNode];
s[iNode] = s[lNode];
s[lNode] = temp;
iNode++;
lNode--;
}
}
void printString(string s, int n){
for(int i=0; i<n; i++){
cout << s[i];
cout << endl;
}
}
int main() {
string s;
cout << "Type String To Reverse: \n";
cin >> s;
cout << "String In Actual Order: \n";
printString(s,s.length());
reverseString(s, 0, s.length()-1);
cout << "String In Reverse Order: \n";
printString(s,s.length());
return 0;
}
答:
3赞
Vlad from Moscow
5/7/2022
#1
此函数接受 by 值类型的对象std::string
void reverseString(string s, int iNode, int lNode){
while(iNode < lNode){
char temp = s[iNode];
s[iNode] = s[lNode];
s[lNode] = temp;
iNode++;
lNode--;
}
}
这意味着它处理用作参数的字符串的副本,并更改副本而不是原始字符串。
您必须将参数声明为具有引用类型
void reverseString(string &s, int iNode, int lNode){
while(iNode < lNode){
char temp = s[iNode];
s[iNode] = s[lNode];
s[lNode] = temp;
iNode++;
lNode--;
}
}
该函数可以按以下方式定义得更简单(例如不使用标准功能)std::swap
std::string & reverseString( std::string &s )
{
for ( std::string::size_type i = 0, n = s.size(); i < n / 2; i++ )
{
char c = s[i];
s[i] = s[n - i - 1];
s[n - i - 1] = c;
}
return s;
}
该函数可以像这样调用
cout << "String In Reverse Order: \n";
std::cout << reverseString( s ) << '\n';
在不使用循环的情况下,您可以按以下方式定义函数
std::string & reverseString( std::string &s )
{
return s.assign( s.rbegin(), s.rend() );
}
至于你自己的功能,那么它至少可以像这样定义printString
std::ostream & printString( const std::string &s, std::ostream &os = std::cout )
{
for ( char c : s )
{
os << c;
}
return os;
}
并且可以称为
printString( s ) << '\n';
评论
void reverseString(string& s, int iNode, int lNode)