【问题标题】:C++, comparing string in linesC++,逐行比较字符串
【发布时间】:2018-03-30 08:04:53
【问题描述】:

我需要检查我的变量是否存在于文本文件每一行的特定位置,是否与行中相同。

我的文本示例中的行:

one two variable 11 221
123 t12 variable 11 331
123 t12 bad_var  11 331

我想检查variable 是否存在于从9 to 16 排队的地方。 我的代码:

std::ifstream my_text_file("text_file.txt");
std::string str
if(my_text_file)
    {
     while(std::getline(my_text_file,str))
         {
          if(my_text_file.seekg(9,std::ios::beg))
             { //what should i wrote here?//   }
         }
    } 

编辑:

我的 variable 它的字符串看起来像 abc3 ,我怎样才能从像 abc 这样的变量中只选择前 3 个字母进行比较? 谢谢

【问题讨论】:

  • 你为什么使用seekg?读取一行,然后使用substr() 获取您想要的行的部分。

标签: c++ text compare lines


【解决方案1】:

将整行读入一个字符串,然后使用substr() 在字符串中的正确位置检查variable 可能是最简单的方法。

std::getline(my_text_file, str);
std::string var = "variable";
if (str.substr(9, var.size()) == var) {
    // do stuff
}

【讨论】:

  • substr 的第二个参数是长度,而不是结束位置。
  • 所以只在字符串开始时显示就足够了,而 .end 不再需要了?你能告诉我如何从我的变量中只选择 3 个字母吗?通常我的variable='abc3' 但我只想比较abc 谢谢!
  • 你可以再次使用 substr。 str = "abc3" 然后做str.substr(0, 3) 得到str的前三个字符
  • @ConfusedByCode 就像:if (str.substr(9, var.size()) == var.substr(0,3)) ?
  • 差不多但不完全。左侧仍在检查与var 一样长的字符串,但右侧仅使用var 的前3 个字符。左侧需要更改为str.substr(9, 3),以便每个字符串的长度匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 2019-10-29
  • 2021-11-19
  • 2016-02-08
相关资源
最近更新 更多