我有一个字符串"8120, 8120NGE, 8120NG, 8130, 8130NG, 8130NGE"
。
我有char*
(0x0012d094 "8130")
我想知道“8130”是否在。确切的说法。
所以我正在使用
istringstream iss(boards);
string token;
AVBOOL foundBool=FALSE;
while(std::getline(iss, token, ','))
{
const char * compareToken = token.c_str();
token.compare(board); // with that : it doesn't work cause "8130" is not equal 0x0012d094 "8130"
if(strcmp(compareToken,board)==0) //with that it doesnt work cause 0x0012cef0 " 8130" is not equal 0x0012d094 "8130"
{
foundBool=TRUE;
}
}
所以问题是如何将字符串与char *进行比较。
我是否需要将char转换为字符串然后使用string.compare 要么 我需要将字符串转换为char并使用strcmp吗? 要么 我还需要做别的吗?
我有点迷失在这里。
答案 0 :(得分:2)
您可以同时使用两者。
我更喜欢使用带有strcmp()C函数的.c_str()方法,因为它不会创建字符串对象。
答案 1 :(得分:1)
要从字符串中删除空格,请参阅“Remove spaces from std::string in C++”。然后您可以比较代码中的字符串。
答案 2 :(得分:0)
boards.find( token )
如果你需要它后面没有字母数字字符,只需检查是否有这样的
如果是,那么从那个位置再次搜索
欢呼&第h。,答案 3 :(得分:0)
使用std::set
会满足您的需求吗?
std::set<std::string> boards;
while (std::getline(iss, token, ',')) {
boards.insert(token);
}
if (boards.find(board) != boards.end()) {
// we found it
}
请注意,这不会考虑令牌中可能存在的空白。
答案 4 :(得分:0)
你的问题听起来像是对比较感到困惑 - 你可以比较string
和const char*
就好了!当包含的字符相等时,string::compare(const char*)
和strcmp
都将返回0
:
string one = "pl"; string two = "ex"; const char* too = "plex"; int main() { string three = one + two; cout << three.compare(too) << endl; cout << strcmp(three.c_str(), too) << endl; }
将打印
0 0
您的实际应用程序问题是您可能希望按", "
拆分字符串,这是标准库工具无法做到的。如果您通常无法摆脱Mazurov答案中提到的空格,您将需要一个接受字符串分隔符的标记生成器。
答案 5 :(得分:0)
我认为您需要重新编写代码,以便在读取令牌之前删除空格。你可以这样调整你的循环:
istringstream iss(boards);
string token;
bool found = false;
while((iss >> std::ws) && std::getline(iss,token,','))
{
found |= (token == board);
}
循环也可以优化,以便在找到令牌时停止:
while(!found && (iss >> std::ws) && std::getline(iss,token,','))
{
found = (token == board);
}