我从文件中读取了一个字符串消息,格式为:
{<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分别添加到位置位置的字符串数组?可变时间将是可以添加到数组的消息数。
答案 0 :(得分:0)
对于std::stoi
,您需要在文件顶部添加以下内容
#include <string>
你需要告诉你的编译器使用C ++ 11标准,例如如果使用g ++传递给编译器参数-std=c++11
要将字符串添加到字符串数组中,请首先确保该数组足够大。例如。如果你知道你将有10个字符串,那么定义
std::array<std::string, 10> str_array;
(确保您拥有:#include <array>
)
然后,如果您想在temp
position
str_array[position] = temp;
如果您事先不知道尺寸且位置按升序排列,则可能需要使用std::vector
。例如。
在顶部
#include <vector>
在循环定义
之外std::vector<std::string> strings;
并在循环中
strings.emplace_back(temp);
如果位置/时间戳在文件中是随机顺序,或者如果数组可能是稀疏的,则可以使用地图。例如。 在顶部
#include <map>
在循环定义
之外std::map<int, std::string> strings;
并在循环中
strings.emplace(position, temp);