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

如何不使用循环从字符串第n个索引开始打印至末尾

问题与解决方案

需求说明

给定字符串(例如"Hello World")和整数索引n(例如n=2),需要输出从索引n到字符串末尾的子串,对应示例输出为"llo World"。具体示例:

  • n = 4,字符串为"I am sorry",输出:" sorry"
  • n = 3,字符串为"I need this",输出:"eed this"

目前采用手动循环实现,但面对超大字符串时效率过低,寻求无需循环的高效实现方式。

当前错误的实现代码(注:此代码实际打印前n个字符,不符合需求):

#include <iostream>
#include <string>

int main() {
    int n;
    std::string s;

    std::cin >> n >> s;

    for(int i = 0; i < n; i++) {
        std::cout << s[i];
    }

    return 0;
}

高效实现方案

直接使用C++ std::string自带的substr成员函数即可,底层为高效的内存操作,无需手动循环,且一次性输出子串的IO开销远低于逐字符打印。

修正后的代码:

#include <iostream>
#include <string>

int main() {
    int n;
    std::string s;

    std::cin >> n >> s;

    // 索引合法性检查,避免越界导致未定义行为
    if (n >= 0 && n < static_cast<int>(s.size())) {
        std::cout << s.substr(n) << '\n';
    } else {
        // 索引不合法时输出空串,可根据需求调整为提示信息
        std::cout << '\n';
    }

    return 0;
}

关键说明

  • s.substr(n)会直接返回从索引n开始到字符串末尾的子串;若n等于字符串长度,返回空串;若n超出合法范围,标准库行为未定义,因此必须添加合法性判断。
  • 对比手动循环:循环需要多次调用cout输出单个字符,IO操作开销极大;一次性输出整个子串能大幅减少IO次数,在处理超大字符串时效率提升明显。

内容的提问来源于stack exchange,提问作者JASON JONATHAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:54:55