You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何使用string指针?实现字符串反转功能时报错如何解决?

C++ string指针实现字符串反转问题解答

错误原因

  • 核心问题为运算符优先级使用错误:C++中[]下标运算符优先级高于*解引用运算符,你代码中写的*str[start++]会被编译器解析为*(str[start++])
  • 你定义的str是std::string类型的指针,str[start++]的语义是从str指向的内存地址偏移start个std::string对象长度的位置,读取到的是std::string类型对象,该类型没有重载解引用运算符,因此触发no match for ‘operator*’的报错。

可行实现方案

方案1:保留指针入参的修复版本

仅需要调整解引用和下标的运算顺序即可,无需修改入参类型、也不需要转为字符数组:

void reverse(string* str, int size)
{
    int start = 0;
    int end = size - 1;
    while(start < end)
    {
        // 先对指针解引用拿到string对象,再取下标访问对应位置的字符
        swap((*str)[start++], (*str)[end--]);
    }
}

int main()
{
    string str = "Something";
    reverse(&str, str.length());
    cout << "Reversed string: " << str << endl;
    return 0;
}

方案2:更符合C++开发规范的实现(推荐)

实际开发中优先使用引用传递替代裸指针传递需要修改的对象,可以规避指针操作的语法风险、也无需额外判断空指针:

// 入参改为string的左值引用,可直接调用对象的size()接口,不需要额外传长度
void reverse(string& str)
{
    int start = 0;
    int end = str.size() - 1;
    while(start < end)
    {
        swap(str[start++], str[end--]);
    }
}

int main()
{
    string str = "Something";
    reverse(str);
    cout << "Reversed string: " << str << endl;
    return 0;
}

如果不需要自己实现反转逻辑,可以直接调用STL标准库的reverse接口,仅需要引入<algorithm>头文件即可:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
    string str = "Something";
    reverse(str.begin(), str.end());
    cout << "Reversed string: " << str << endl;
    return 0;
}

内容的提问来源于stack exchange,提问作者Adinath Kolhapure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:24:05