如何用函数substring从字符串中减去specifeek文本

How to substract a specifiek text from a string with the function substring

本文关键字:specifeek 文本 字符串 何用 函数 substring      更新时间:2023-10-16

为了从字符串中减去时间戳,我使用了子字符串(pos,#char)。

我的代码部分工作。我的问题是一致性。我正在从文本文件中检索一个格式为"名称时间"的字符串,示例:"Don 00:12"。

该字符串从文件中提取到HighScoreInfo1中。此外,我正在从另一个文件中提取一个字符串,即名称部分,到previous_name中。

有了这些信息,我正试图计算子字符串必须开始的位置。

int test = HighScoreInfo1.size() - (previous_name.size()+1 );

我已经测量了额外的字符,这是一个空格,即+2。1分获得空位,1分到达他需要首发的位置。

时间戳00:00有五个字符长。

                int test = HighScoreInfo1.size() - (previous_name.size()+2 );
                TimeToBeat = HighScoreInfo1.substr(test, 5);
                TestFile << "Orginal string size " << ">>" << HighScoreInfo1.size() << " " << "size of name"<< ">>" <<previous_name.size()+2<<" "  << "Position "<< test << endl;
                TestFile << "Orginal string " << ">>"<<HighScoreInfo1 << " " << "Substring"<< ">>" <<TimeToBeat << endl;

这是我的输出,名称很长:

   Orginal string size >>14            size of name>>10 Position >> 4
   Orginal string      >>Chrystel 00:09 Substring>>stel 

旁注:你看不到,但在上面的例子中,"stel"后面的空格是第五个字符。

这是我的输出,简称:

   Orginal string size >>9         size of name>>5 Position>> 4
   Orginal string      >>Don 00:09 Substring    >>00:09

使用较短的名称,我可以完美地获得时间戳。

如何使其工作一致。我没有添加我的代码的其余部分,因为这部分是有效的。基本上只有子字符串部分工作不一致。

我该怎么解决这个问题?

您没有正确计算test。它应该只比名称的大小多1,而不是HighScoreInfo1的大小减去它(这是时间戳的长度,您知道它是5)。您只需添加1,而不需要添加2,因为位置是基于零的。

int test = previous_name.size() + 1;

演示

它只适用于较短的名称,因为名称恰好有3个字符长。

int test = HighScoreInfo1.size() - (previous_name.size()+2 );

这将计算时间长度(始终为5)。

TimeToBeat = HighScoreInfo1.substr(test, 5);

这样可以得到5-10个字符。总是不管字符串的长度如何。也许你想这样做,它读取最后五个字节?

TimeToBeat = HighScoreInfo1.substr(HighScoreInfo1.size()-5);