在C++中是否可以用另一个字符串替换字符串的一部分?
基本上,我想这样做:
QString string("hello $name");
string.replace("$name", "Somename");
Run Code Online (Sandbox Code Playgroud)
但我想使用标准C++库.
我需要搜索一个字符串并编辑它的格式.
到目前为止,我可以替换第一次出现的字符串,但是我无法在下一次出现此字符串时这样做.
这就是我的工作,有点像:
if(chartDataString.find("*A") == string::npos){ return;}
else{chartDataString.replace(chartDataString.find("*A"), 3,"[A]\n");}
Run Code Online (Sandbox Code Playgroud)
如果找不到字符串,则根本不打印任何内容,因此不好.
我知道我需要遍历整个字符串chartDataString并替换所有出现的事件.我知道有很多类似的帖子,但我不明白(像这样用另一个子串C++替换子串)
我也尝试过这样的事情来循环遍历字符串:
string toSearch = chartDataString;
string toFind = "*A:";
for (int i = 0; i<toSearch.length() - toFind.length(); i++){
if(toSearch.substr(i, toFind.length()) == toFind){
chartDataString.replace(chartDataString.find(toFind), 3, "[A]\n");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑考虑到建议,这在理论上应该有效,但我不知道为什么不这样做
size_t startPos=0;
string myString = "*A";
while(string::npos != (startPos = chartDataString.find(myString, startPos))){
chartDataString.replace(chartDataString.find(myString, startPos), 3, "*A\n");
startPos = startPos + myString.length();
}
Run Code Online (Sandbox Code Playgroud)
我想用字符串替换字符串中的字符.我可以就地做吗?由于新字符串的长度大于原始字符串.问题是我可以使用额外的缓冲区吗?例如
void replaceChar(std::string &input, std::string replacementString, char charToReplace)
{
//some code here. No additional buffer
}
void main(){
std::string input = "I am posting a comment on LinkedIn";
std::string replacementString = "pppp";
char charToReplace = 'o';
replaceChar(input, replacementString, charToReplace);
}
Run Code Online (Sandbox Code Playgroud)
我只想要策略(算法).如果算法的设计保持一定的语言,一旦它被启动就不会动态增加或减少字符串长度,这将是很好的
我知道如何使用 std::replace 替换向量中的字符,如下所示:ranges::replace
我会撒谎对字符串中的子字符串做类似的事情。例如:
std::string str{"The quick brown fox jumped over the lazy dog.";
std::ranges::replace(str, "the", "a");
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
错误:与调用 '(const std::ranges::__replace_fn) (std::string&, const char [4], const char [2])' 不匹配
或者如果我使用字符串
错误:与调用 '(const std::ranges::__replace_fn) (std::string&, std::string&, std::string&)' 不匹配
它适用于字符,但不适用于子字符串。
有任何想法吗?
我已成功使用循环 andstring.find和string.replace,但想使用范围。
我想NSString用Objective C中的另一个子串替换子串.
我知道如何找到我想要替换的子字符串:
NSRange range = [string rangeOfString:substringIWantToReplace];
NSString *substring = [string substringFromIndex:NSMaxRange(range)];
Run Code Online (Sandbox Code Playgroud)
但是当涉及到实际移除/替换它时,我有点困惑.我是否在使用另一个子串C++替换substring的C++方法?或者C方法如何替换c中的子串??在Objective-C上有一个相关的问题:子串和替换,但是有问题的字符串是一个URL,所以我认为我不能使用答案.
我试着将\ charcter插入一个字符串,所以我会得到
C:\\ Users \\ dave \\ Desktop \\ XY.txt而不是C:\ Users\georg\Desktop\XY.txt
这是代码但由于某种原因它不起作用
string q="C:\Users\georg\Desktop\XY.txt";
char x='\\';
for (int i = 0; i < q.length(); ++i) {
if (q[i] == '\\')
q.insert(i,4,x);
}
Run Code Online (Sandbox Code Playgroud) 我想,以取代所有出现&在我std::string与&。这是代码段代码
链接
#include <algorithm>
#include <string>
#include <iostream>
int main()
{
std::string st = "hello guys how are you & so good & that &";
std::replace(st.begin(), st.end(), "&", "&");
std::cout << "str is" << st;
return 1;
}
Run Code Online (Sandbox Code Playgroud)
它显示了std :: replace无法替换字符串的错误,但仅适用于字符。 我知道我仍然有逻辑可以完成我的工作,但是有什么干净的C ++方式可以做到这一点吗?有内置功能吗?
c++ ×6
string ×5
replace ×3
algorithm ×2
substring ×2
c++11 ×1
c++20 ×1
nsstring ×1
objective-c ×1
std ×1
std-ranges ×1
stdstring ×1
str-replace ×1