在子字符串后插入字符串

时间:2018-05-26 15:19:50

标签: c++ string

也许我的头衔很奇怪:(
我这里有问题,我想把字符串插入字符串 首先我输入要插入的字符串,然后输入插入前一个字符串的位置的第二个字符串
这是我的代码

string a,b;
string str;

cin >> a >> b;
str.insert(b,a);


这里的例子是:

str = "ihaveadream";
a = "simple";
b = "ihavea";


那么str的最终结果是:

str = "ihaveasimpledream";

换句话说,字符串a将在字符串b之后插入 我怎样才能做到这一点?谢谢

4 个答案:

答案 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::findstd::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 );
}

See here