有人可以向我解释如何正确搜索"标签"存储在字符串类中的字符?
例如:
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
答案 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;
}
关于您的编辑,如何确保输入为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;
}