Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中插入字符串+;_C++_String - Fatal编程技术网

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