关于c ++:如何在字符串中检查存储的“”?


How do I check for stored “ ” in a string?

有人能告诉我如何正确地搜索存储在字符串类中的"tab"字符吗?

例如:

text.txt内容:

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

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

MCP.CPP:

1
2
3
4
5
6
7
8
9
10
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


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

char被转换成int,然后编译器试图将该int与指向字符串文本的指针进行比较,而不能将普通整数与指针进行比较。

但是,您可以将一个字符与另一个字符进行比较,如

1
arrey[i] == '\t'


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include

using namespace std;

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

代码基于此答案。这是std::find的引用。

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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;
}


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

试试这个:

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

有关std::string::find的更多信息,请访问此处。