C++ 无法处理新行'\n';字符串中的分隔符

C++ 无法处理新行'\n';字符串中的分隔符,c++,string,algorithm,C++,String,Algorithm,我正在尝试使用以下代码反转字符串: string reverseStringHelper(const char* s, bool flag) { if(*s == '#') { return ""; } if(flag) { return reverseStringHelper(s+1, 0) + *s + "\0"; } else { return rever

我正在尝试使用以下代码反转字符串:

string reverseStringHelper(const char* s, bool flag) {
        if(*s == '#') {
            return "";
        }
        if(flag) {
            return reverseStringHelper(s+1, 0) + *s + "\0";
        } else {
            return reverseStringHelper(s+1, 0) + *s;
        }
    }
    string reverseString(string s) {
        s = s+'#';
        return reverseStringHelper(s.c_str(), 1);

    }
我非常适合以下测试用例:
“你好”
“你好世界”

但在以下情况下失败:

"Hello World
New World!"

为什么有人能解释

< P>我不知道为什么你要添加<代码> < <代码>字符>代码> CySTR 将给你一个空结尾字符串的指针,但是如果你想要一个C++更友好的方法来反转一个字符串,只需使用<代码> RCAST/<代码>和<代码> ReNe//C> >:

std::string text = "Hello, world";
std::string reversed(text.rbegin(), text.rend());

尝试使用较短的字符串(这样就不会有太多递归调用),然后在调试器中单步执行代码,逐步执行递归调用。检查<代码> S/S>和<代码> *S/<代码>以及先前调用的递归调用(可能希望使用临时变量来存储结果,以便调试更容易)。您能解释它是如何失败的吗?我不知道C++标准库,但是<代码> STR+“0”<代码>产生了不同于 STR <代码>的值。(给定<代码>字符串STR;)?@ AXIAC:是的。<代码> STD::String 是二进制安全的,可以像其他字符一样存储<代码> 0”/COD>。我不理解这里使用“代码>”0’< /C> >。OP似乎变得混乱,混合C和C++习语。