如何在不使用内置函数的情况下编写 c++ 代码来反转字符串?

How to write c++ code to reverse a string without using inbuilt function?

提问人:Suraj Kumar 提问时间:5/7/2022 最后编辑:Vlad from MoscowSuraj Kumar 更新时间:5/7/2022 访问量:176

问:

我已经写了这个代码。它没有显示任何错误,但字符串没有被反转,请让我知道我在哪里犯了错误? 我正在使用代码块编写代码和 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;
}
C++ 字符串 引用传递反 按值传递

评论

4赞 Learpcs 5/7/2022
你按值传递字符串,这意味着你创建了一个字符串的完整副本并对其进行了一些操作,同时你的初始字符串保持不变。你的 reverseString func 应该有这个签名:.另请参阅此处void reverseString(string& s, int iNode, int lNode)

答:

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';