【问题标题】:How do I check for stored "\t" in a string?如何检查字符串中存储的“\t”?
【发布时间】:2015-03-30 12:43:15
【问题描述】:

有人可以向我解释如何正确搜索存储在字符串类中的“制表符”字符吗?

例如:

text.txt 内容:

        std::cout << "Hello"; // contains one tab space 

用户在提示符下输入:./a.out

main.cpp:

string arrey;
getline(cin, arrey);
int i = 0;
while( i != 10){
     if(arrey[i] == "\t") // error here
     {
         std::cout << "I found a tab!!!!"
     }
     i++;
}

由于文本文件中只有一个制表符空间,我假设它存储在索引 [0] 中,但问题是我似乎无法进行比较,而且我不知道任何其他方式搜索它。有人可以帮忙解释一下替代方案吗?

Error: ISO C++ forbids comparison between pointer and integer

【问题讨论】:

  • if(arrey[i] == '\t')

标签: c++


【解决方案1】:

为什么不使用 C++ 库提供的功能?你可以这样做:

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
  string arrey;
  getline(cin, arrey);
  if (arrey.find("\t") != std::string::npos) {
      std::cout << "found a tab!" << '\n';
  }
  return 0;
}

代码基于this 答案。这是std::find 的参考。


关于您的编辑,如何确定输入将是 10 个位置?这可能太小或太大!如果小于输入的实际大小,就看不到字符串的所有字符,如果太大,就会溢出!

您可以使用.size(),它表示字符串的大小并使用这样的 for 循环:

#include <iostream>
#include <string>

using namespace std;

int main() {
  string arrey;
  getline(cin, arrey);
  for(unsigned int i = 0; i < arrey.size(); ++i) {
    if (arrey[i] == '\t') {
      std::cout << "I found a tab!!!!";
    }
  }
  return 0;
}

【讨论】:

    【解决方案2】:

    std::string::find() 可能会有所帮助。

    试试这个:

    ...
    if(arrey.find('\t') != string::npos)
    {
        std::cout << "I found a tab!!!!";
    }
    

    更多关于std::string::find的信息请见here

    【讨论】:

      【解决方案3】:

      首先,i 是什么?其次,当您使用std::string 对象的数组索引时,您会得到一个字符(即char)而不是字符串。

      char 被转换为 int,然后编译器尝试将 int 与指向字符串文字的指针进行比较,您无法将纯整数与指针进行比较。

      可以将一个字符与另一个字符进行比较,例如

      arrey[i] == '\t'
      

      【讨论】:

      • @G.Samaras 最初是作为评论开始的,但由于它包含答案,为什么不稍微扩展它并实际将其作为答案发布呢? :)
      • @G.Samaras 有一个编辑宽限期,在此期间,编辑将折叠到之前的编辑中(如果没有进行“显式”编辑,则为原始编辑)。
      猜你喜欢
      • 2014-03-29
      • 2016-12-11
      • 2016-01-22
      • 2020-11-29
      • 2011-07-30
      • 2011-09-03
      • 2013-04-04
      • 1970-01-01
      • 2021-11-28
      相关资源
      最近更新 更多