将字符串存储在字符串中提到的位置

时间:2015-10-14 15:33:31

标签: c++

我从文件中读取了一个字符串消息,格式为:

{<1>}Hello!

{<2>}What is up!
How is everyone?

{<5>}Things are great here!

{<4>}{[Cameron]}Are things good?

我需要创建一个字符串数组并将每条消息存储在"{< >}" without the "{< >}""{[username]}."之间指定的位置。我可以使用以下字符获取字符串部分中整数的值: p>

int time = 5;
string messages = "{<1>}Hello!\n\n{<2>}What is up!\nHow is everyone?\n\n\{<5>}Things are great here!\n\n{<4>}{[Cameron]}Are things good?\n";

string temp;
string timestamp;
int position;

int start = -1;
int end;
int next = 0; 

while(next != -1)
{
   start = messages.find("{<",start+1);
   end = messages.find(">}",start+1);
   next = messages.find("{<",start+1);

   timestamp = messages.substr(start+2,end-start-2);

   if(next == -1)
      temp = messages.substr(end+2,messages.length()-end-2);
   else
      temp = messages.substr(end+2,next-end-2);

   position = std::stoi(timestamp);

   \\This is where I would add temp to position timestamp of an array of strings.
}

此字符串编号必须转换为整数,以便我可以使用它来指定字符串将存储在的行。我发现我应该可以使用stoi() to convert strings to integers,但我得到< strong>错误 "'stoi' is not a member of 'std'."

除了这个错误之外,我如何将字符串temp分别添加到位置位置的字符串数组?可变时间将是可以添加到数组的消息数。

1 个答案:

答案 0 :(得分:0)

  1. 对于std::stoi,您需要在文件顶部添加以下内容

    #include <string>
    

    你需要告诉你的编译器使用C ++ 11标准,例如如果使用g ++传递给编译器参数-std=c++11

  2. 要将字符串添加到字符串数组中,请首先确保该数组足够大。例如。如果你知道你将有10个字符串,那么定义

    std::array<std::string, 10> str_array;
    

    (确保您拥有:#include <array>

    然后,如果您想在temp

    位置插入position
    str_array[position] = temp;
    
  3. 如果您事先不知道尺寸且位置按升序排列,则可能需要使用std::vector。例如。 在顶部

    #include <vector>
    

    在循环定义

    之外
    std::vector<std::string> strings;
    

    并在循环中

    strings.emplace_back(temp);
    
  4. 如果位置/时间戳在文件中是随机顺序,或者如果数组可能是稀疏的,则可以使用地图。例如。 在顶部

    #include <map>
    

    在循环定义

    之外
    std::map<int, std::string> strings;
    

    并在循环中

    strings.emplace(position, temp);