C++ 在C+;中插入字符串+;
我需要在按字母顺序排列的字母串中插入一个字符,这个字符必须按字母顺序放置在它所属的位置 例如,我有字符串C++ 在C+;中插入字符串+;,c++,string,C++,String,我需要在按字母顺序排列的字母串中插入一个字符,这个字符必须按字母顺序放置在它所属的位置 例如,我有字符串stringmystring(“afgjz”)和输入代码 cout << "Input your character" << endl; char ch; cin >> ch; coutch; 但是我如何使它在输入字符(比如b)后,将其添加到字符串的正确位置,从而使字符串变为“abfgjz”。您可以使用std::lower_bound找到要插入的位置 m
stringmystring(“afgjz”)代码>和输入代码
cout << "Input your character" << endl;
char ch;
cin >> ch;
coutch;
但是我如何使它在输入字符(比如b)后,将其添加到字符串的正确位置,从而使字符串变为“abfgjz”。您可以使用std::lower_bound
找到要插入的位置
myString.insert(std::lower_bound(myString.begin(), myString.end(), ch), ch);
一个更通用的解决方案是使用如下函数
namespace sorted
{
template<class Container, class T>
void insert(Container & object, T const & value)
{
using std::begin;
using std::end;
object.insert(std::lower_bound(begin(object),
end(object), value), value);
}
}
类std::string具有以下插入方法(除了其他插入方法外):
因此,您所需要的只是找到新角色必须插入的位置。如果字符串已经具有相同的字符,则有两种方法:要么在字符串中现有字符之前插入新字符,在这种情况下,应使用标准算法std::lower_bound
,要么在字符串中现有字符之后插入新字符,在这种情况下,应使用标准算法std::上限
下面是一个演示程序,它演示了如何使用标准算法std::upper_bound
实现这一点。如果愿意,您可以将其替换为std::lower_bound
。虽然在我看来,最好在现有角色之后插入新角色,因为在某些情况下,可以避免在插入新角色的目标位置之后移动角色
#include <iostream>
#include <algorithm>
#include <string>
int main()
{
std::string myString( "afgjz" );
char c = 'b';
myString.insert( std::upper_bound( myString.begin(), myString.end(), c ), c );
std::cout << myString << std::endl;
return 0;
}
找到正确的位置并使用。您也可以使用大小为26的int
数组。然后你可以通过增加计数器在O(1)中添加一个字母。将此数组转换为字符串
需要花费O(n)个时间。感谢莫斯科的Vlad:D这就像一个符咒,在这里我想我必须将其分解为数组或其他东西:D不认为会这么简单。谢谢
iterator insert(const_iterator p, charT c);
#include <iostream>
#include <algorithm>
#include <string>
int main()
{
std::string myString( "afgjz" );
char c = 'b';
myString.insert( std::upper_bound( myString.begin(), myString.end(), c ), c );
std::cout << myString << std::endl;
return 0;
}
abfgjz