也许我的头衔很奇怪:(
我这里有问题,我想把字符串插入字符串
首先我输入要插入的字符串,然后输入插入前一个字符串的位置的第二个字符串
这是我的代码
string a,b;
string str;
cin >> a >> b;
str.insert(b,a);
这里的例子是:
str = "ihaveadream";
a = "simple";
b = "ihavea";
那么str的最终结果是:
str = "ihaveasimpledream";
换句话说,字符串a
将在字符串b
之后插入
我怎样才能做到这一点?谢谢
答案 0 :(得分:1)
您可以使用std::string::find(string&)
搜索字符串b
(您要在之后插入的字符串)。
之后,您可以通过将a
字符串的长度添加到b
返回的位置,找到需要添加字符串find
的位置。
然后,您可以使用std::string::substr
将大字符串str
拆分为两个字符串,从开头到find
返回的值,以及{{1}返回的值到最后。
最后,您可以按正确的顺序连接三个字符串。
答案 1 :(得分:1)
好的,这是有效的
size_t pos; //position of string b
pos = str.find(b);
str.insert(pos + b.size() , a);
答案 2 :(得分:1)
其中一个insert
重载会占用您希望插入的字符串中的偏移位置以及要插入的字符串。要找到此位置,您可以使用find
,它将返回找到的字符串开头的索引,如果找不到则返回npos
。如果找到,则需要提前搜索字符串的长度以获得偏移量。换句话说:
#include <iostream>
#include <string>
int main()
{
std::string a, b;
std::string str = "ihaveadream";
std::cin >> a >> b;
size_t pos = str.find(b);
if (pos != std::string::npos)
str.insert(pos + b.size(), a);
std::cout << str;
}
答案 3 :(得分:1)
您可以使用std::string::find
和std::string::insert
如下所示:
if( auto pos = str.find(b) ; pos != std::string::npos )
// Using C++17 construct, you could declare a variable outside as well for pre-C++17
{
str.insert( pos + b.size() , a );
}