gpt4 book ai didi

c++ - (C++) 用其他数组的相应值替换字符串中找到的数组的任何值?

转载 作者:行者123 更新时间:2023-11-28 07:52:19 25 4
gpt4 key购买 nike

我尝试过各种各样的事情。不幸的是,我没有保留以前的代码记录,所以我只向您展示我目前拥有的:

    string l2n(std::string input) {
std::string original[26] = {"A","B","C","D","E", "F", "G", "H", "I", "J", "K," "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
//std::string originalLower[26] = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
std::string newval[26] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26"};
string neworig = (original[0], original[1], original[2], original[3], original[4], original[5], original[6], original[7], original[8], original[9], original[10], original[11], original[12], original[13], original[14], original[15], original[16], original[17], original[18], original[19], original[20], original[21], original[22], original[23], original[24], original[25]);
string newnewval = (newval[0], newval[1], newval[2], newval[3], newval[4], newval[5], newval[6], newval[7], newval[8], newval[9], newval[10], newval[11], newval[12], newval[13], newval[14], newval[15], newval[16], newval[17], newval[18], newval[19], newval[20], newval[21], newval[22], newval[23], newval[24], newval[25]);
size_t posit = input.find(neworig.c_str());
string hash2345;
hash2345 = input.replace(posit, std::string(neworig).length(), newnewval.c_str());
return hash2345;
}

编译正常,但输出“26HELLO”和我的输入“HELLO”。它实际上只是在给定的任何输入的开头附加 26..我猜它与使用长度的 input.replace 的使用有关,但我不知道还能做什么而且谷歌没有找到任何事物。感谢您的帮助!

最佳答案

我认为您误解了 string::replace 的作用。它不会用另一个字符串中等效定位的字符替换一个字符串中的字符。它将一个字符串中的一段字符替换为整个另一个字符串。

例如,

std::string test = "This is a test.";

// Replace 2 characters, starting at position 5 with "was"
test.replace(5, 2, "was");

std::cout << test; // Outputs "This was a test."

对于您正在做的事情,您将需要一个循环来对输入中的每个字符执行操作,例如

string hash2345;

// For each character in input
for (int i = 0; i < input.length(); ++i) {

// Try to find the string equal to the i'th character of input in
// the "original" array.
string* original_val_ptr = std::find(original, original + 26,
std::string(input[i]));

// Make sure that it actually found something (this handles the case
// where input has some other characters, like lowercase or punctuation).
if (original_val_ptr != NULL) {

// Find the position of this value in the original array.
size_t pos = original_val_ptr - original;

// Add the string in the equivalent position in the "newval" array
// to the output.
hash2345 += newval[pos];
}
}

return hash2345;

现在可以对您的代码进行许多额外的改进,我相信其他答案也会提出这些改进,但鉴于您似乎是一个相对较新的程序员,我选择保留这个答案尽可能直截了当,只关注您显然要实现的算法的正确性。

此外,这将适用于一组字符到另一组字符的任何映射,即使它不是字母到数字。

关于c++ - (C++) 用其他数组的相应值替换字符串中找到的数组的任何值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13517199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com