我有以下字符串:
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++;
}
}
执行此操作的最有效方法是什么?
您当前的实现将字符串的每个单个单元都视为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++;
}
}