是否有工具或特定语法可以将案例插入到具有连续索引的开关中并使下面的索引进行调整

问题描述 投票:0回答:1

我有一个函数,它接受一个整数并返回一个由开关选取的字符串。这些字符串是连贯文本的一部分,每当我想编辑该函数在为每个连续 int 调用时返回的连贯文本时,我希望能够向开关添加大小写。

该函数现在的样子:

std::string proceed(int id){
   switch(id){
      case 1: return "Hello";
      case 2: return "my ";
      case 3: return "is";
      case 4: return "Marc";
   }
}

我希望能够在案例 2 之后和案例 3 之前插入“Name”。我现在要做的是插入另一个案例 3 :return “Name”;并将下面的所有索引增加 1。这是非常繁琐和可怕的工作流程。

我正在寻找一种方法,以 C++ 合法的方式执行以下操作:

std::string proceed(int id){

   int i = 0;

   switch(id){
      case ++i: return "Hello";
      case ++i: return "my ";
      case ++i: return "is";
      case ++i: return "Marc";
   }
}

此处的 case 语句始终(在代码中)使用相同的符号,这允许将 case 转储到任何地方而无需调整所有 case。

是否有任何语法或工具可以以简洁的方式执行此操作? (除了使用一些单独的程序进行自动文本编辑之外)

c++ switch-statement control-flow
1个回答
0
投票

我以为

map
是解决方案,但是
vector
有更简单的插入方法:

如果需要更多逻辑,可以封装一下:

#include <iostream>
#include <vector>
#include <string>

void insertAtIndex(std::vector<std::string>& vec, int index, const std::string& newValue) {
    // Insert the new value at the desired index
    if (index <= vec.size()) {
        vec.insert(vec.begin() + index, newValue);
    } else {
        std::cerr << "Invalid index" << std::endl;
    }
}

简单地称呼它:


int main() {
    // Create a vector to store the strings
    std::vector<std::string> vec = {"Hello", "my", "is", "Marc"};

    // Insert a new value at index 3
    insertAtIndex(vec, 3, "name");

    // Test the function
    for (int i = 0; i <= vec.size(); ++i) {
        std::cout << vec[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

© www.soinside.com 2019 - 2024. All rights reserved.