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

C++如何通过指针修改数组值 逗号拆分输入存入数组首元素无输出问题

问题原因分析
  • 数组下标使用错误:拆分逻辑中直接用原字符串的遍历下标i作为数组的存储下标,比如输入a,b,第一个逗号出现在原字符串索引为1的位置,会把第一个拆分结果a存入数组下标1的位置,所以数组下标0的位置始终是空值,自然打印没有输出。
  • 遗漏尾部元素:循环结束后没有把最后一个拆分出来的字符串存入数组,因为最后一个元素后面没有逗号,不会触发else分支的存储逻辑。
  • 输入读取逻辑问题:std::cin >> input默认以空格作为分隔符,如果你输入的内容包含空格,只会读取到第一个空格前的内容,建议改用std::getline读取整行输入。
  • 空输入越界风险:没有判断输入字符串是否为空,直接访问input[input.length() - 1]会触发数组越界,导致程序崩溃。
修正后的完整代码
#include <iostream>
#include <string>

void Seperate(std::string input, std::string(*ptr)[50]) {
    // 先判断输入是否为空,避免越界
    if (input.empty()) {
        return;
    }
    if (input[input.length() - 1] == ',')
    {
        input.erase(input.length() - 1, 1);
    }

    std::string value;
    int length = input.length();
    // 新增独立的数组存储下标
    int arr_idx = 0;
    for (int i = 0; i < length; i++) {
        if (input[i] != ',') {
            value += input[i];
        }
        else {
            (*ptr)[arr_idx] = value;
            arr_idx++;
            value = "";
        }
    }
    // 循环结束后存入最后一个元素
    if (!value.empty()) {
        (*ptr)[arr_idx] = value;
    }

}
int main() {
    std::cout << "Enter comma seperated values to seperate: ";
    std::string input;
    // 改用getline读取整行
    std::getline(std::cin, input);
    std::string list[50];
    std::string(*ptr)[50] = &list;
    Seperate(input, ptr);
    std::cout << list[0];
}
关键修改说明
  • 新增了独立的数组索引变量arr_idx,每存储一个元素就自增,保证元素从数组下标0开始顺序存储
  • 循环结束后补充了最后一个元素的存储逻辑
  • 把输入读取改为std::getline,支持读取带空格的整行输入
  • 新增了空输入判断,避免字符串越界访问
  • 移除了代码中没有用到的头文件引用,减少编译开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:27:03