如何用另一个std :: string的迭代值有效替换std :: string中的字符?

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

我有以下字符串:

std::string str1 = "1234567890";
std::string str2 = "B-XXXX_XXX_V-XX_X";

我想遍历str2,并用str1中的后续值替换X的每次出现,结果是:B-1234_567_V-89_0

我在下面有一个类似的解决方案,但是它不是很有效(它在某一时刻起作用)。简而言之,我尝试遍历str2中的字符,如果该字符等于'X',请将该字符替换为str1中的递增索引:

  int ind = 0;
  std::string pattern_char;
  for (int i = 0; i < str2.size(); i++) {
    pattern_char = str2[i];
    if (pattern_char == "X") {
      str2[i] = str1[x_ind];
      x_ind++;
    }
  }

执行此操作的最有效方法是什么?

c++ loops stdstring
1个回答
0
投票

您当前的实现将字符串的每个单个单元都视为std::string,而不是单个char,这会带来一些不必要的开销。这是使用char的重写:

  int ind = 0;
  for (int i = 0; i < str2.size(); i++) {
    if (str2[i] == 'X') {    // Don't assign str2[i] to a char; use character literals
      str2[i] = str1[x_ind];
      x_ind++;
    }
  }

您可以通过使用基于范围的for循环来提高可读性,如下所示:

  int ind = 0;
  for (char& ch: str) {
    if (ch == 'X') {
      ch = str1[x_ind];
      x_ind++;
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.