如何检查存储的" \ t"在一个字符串?

时间:2015-01-30 23:04:02

标签: c++

有人可以向我解释如何正确搜索"标签"存储在字符串类中的字符?

例如:

text.txt内容:

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

用户输入提示: ./ a.out&lt;的text.txt

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

3 个答案:

答案 0 :(得分:4)

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

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

可以然后将一个角色与另一个角色进行比较,比如

arrey[i] == '\t'

答案 1 :(得分:1)

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

试试这个:

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

std::string::find的更多信息here

答案 2 :(得分: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;
}