String 调用函数C++;

String 调用函数C++;,string,vector,split,String,Vector,Split,我需要帮助 我编写了一个代码,其目的是修改.txt中特定位置的值。我的第一个想法是将我所有的.txt文件存储在一个向量中,然后处理该向量 为此,我创建了两个函数:一个基本上是拆分.txt中的一行,另一个是在txt中查找好的行。找到后,通过调用第一个来拆分该行,然后我可以修改想要的行的值 或多或少,您可以阅读以下代码: #包括 #包括 #包括 #包括 #包括 使用名称空间std; 向量拆分(字符串myData){ 临时病媒; 字符串delim=“”; 字符串buf=“”; int i=0; 而(i

我需要帮助

我编写了一个代码,其目的是修改.txt中特定位置的值。我的第一个想法是将我所有的.txt文件存储在一个向量中,然后处理该向量

为此,我创建了两个函数:一个基本上是拆分.txt中的一行,另一个是在txt中查找好的行。找到后,通过调用第一个来拆分该行,然后我可以修改想要的行的值

或多或少,您可以阅读以下代码:

#包括
#包括
#包括
#包括
#包括
使用名称空间std;
向量拆分(字符串myData){
临时病媒;
字符串delim=“”;
字符串buf=“”;
int i=0;
而(ielse cerr虽然代码看起来还不错,但我看到了两个bug

  • 我不确定这是否是故意的,但是
    split
    函数从不返回最后一个匹配项。在您的示例中,调用
    split($DOUBLE EnergySampler 0.019$)
    将返回向量
    [“$”,“DOUBLE”,“EnergySampler”,“0.019”]
    。请注意缺少的
    “$”
    在向量的末尾。因此,要解决这个问题,您需要检查函数末尾的
    buf
    是否为空,如下所示(同样,看起来
    ROOT
    解释器接受将
    char
    string
    进行比较,但我在修复中正确地将
    delim
    定义为
    char
    ):

    向量拆分(字符串myData){ 临时病媒; char delim=''; 字符串buf=“”; int i=0; 而(i
  • 第二,当你在
    分割的
    向量上迭代时,你使用的是
    i
    索引变量(来自
    的外部
    ),而不是
    的内部
    k
    索引变量

    for(int k=0;k你能确定
    benchmark.txt
    中的
    delim
    都是空格吗?它们也可以是
    选项卡(
    \t
    )否?是的,我检查了它占用了所有空格,以及我的文本文件。谢谢。好的,谢谢你的详细回答,我明白了!现在我可以做我想做的了。
    $ DOUBLE EnergySampler 0.019 $
    $ DOUBLE Dummy 0.123 $
    $ DOUBLE EnergySampler 0.018 $
    $ DOUBLE Dummy 0.321 $
    $ DOUBLE EnergySampler 0.017 $
    
    5
    $
    DOUBLE
    EnergySampler
    0.019
    $
    5
    $
    DOUBLE
    EnergySampler
    0.018
    $
    5
    $
    DOUBLE
    EnergySampler
    0.017
    $