gpt4 book ai didi

c++ - 替换字符串中的单词而不跳过空格

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:31 25 4
gpt4 key购买 nike

我有一个包含句子的字符串。我必须搜索并替换该字符串中的特定单词。在我的例子中,我有一个线 vector 和另一个要替换的词 vector 。这是生成包含最终文本的文件的函数:

void Generator::generate_file(const string& fileName){
string inBuffer, outBuffer;
std::stringstream ss;
std::ofstream outFile;
outFile.open(fileName);
for (const auto& inIT : userCode){
//userCode is a vector which contains lines of text
ss.str(inIT);
ss.clear();
outBuffer = "";
while (ss >> inBuffer){
for (auto keyIT : keywords){
//keywords is a vector which contains words to replace
if (keyIT == inBuffer)
inBuffer = "REPLACED";
}
outBuffer += inBuffer + " ";
}
outFile << outBuffer << endl;
}
outFile.close();
}

这个函数的问题在于它会跳过所有空格。我在输出文件中需要它们。我应该怎么做才能实现这一目标?您可以在下面看到其工作原理的示例:

用户代码:

userCode[0] = "class UrlEncoder(object): class";
userCode[1] = " def __init__(self, alphabet=DEFAULT_ALPHABET,\n block_size=DEFAULT_BLOCK_SIZE):";

显示用户代码 vector :

class UrlEncoder(object):
def __init__(self, alphabet=DEFAULT_ALPHABET, block_size=DEFAULT_BLOCK_SIZE):

执行我的函数后,它看起来像这样:

REPLACED UrlEncoder(object): 
REPLACED __init__(self, alphabet=DEFAULT_ALPHABET, block_size=DEFAULT_BLOCK_SIZE):

如您所见,它正确地替换了关键字。但不幸的是它跳过了制表符。

最佳答案

主要问题是流提取 >>> 运算符的工作方式。它在读取下一个格式化输入时删除并丢弃任何前导空白字符。假设您想在抓取输入时坚持使用 ss >> inBuffer,您需要找到某种方式在执行任何输入提取之前先发制人地抓取任何前导空格。

例如,

string eatwhite(const string &str, size_t pos)
{
size_t endwhite = str.find_first_not_of(" \t\n", pos);
if (endwhite == string::npos) return "";
return string(str.begin() + pos, str.begin() + endwhite);
}

现在您将在执行任何 >>> 之前调用 eatwhite:

    string outBuffer = eatwhite(ss.str(), ss.tellg());
while (ss >> inBuffer)
{
for (auto keyIT : keywords)
{
//...
}
string whitesp = eatwhite(ss.str(), ss.tellg());
outBuffer += inBuffer + whitesp;
}
outFile << outBuffer << endl;

关于c++ - 替换字符串中的单词而不跳过空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27447599/

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