关于字符串的 == 和vector 的find函数。

maowu 2005-01-23 09:41:16
我期望在一个vector中查找一个字符串。vector的元素是从文件读进来的语句。(windows)
rule是一个string。MFC的文本框中用CString读进来的。

我知道文件中有根rule一样的一行的。但不知道为什么,总是找不到。

//如果能找到。
if (std::find(myVector.begin(), myVector.end(), rule) != myVector.end())

总是返回false。

我后来就一个个循环,从vector中一个个比较,还是不行:
bool have = false;

while(c_iter != c_iter_end)
{
if (rule == *c_iter)//我调试的时候看到明明他们一样,还是进不去if里面。
{
have = true;
break;
}
c_iter++;
}


===============
附上从文本框读进来的代码:
CString rule;
edit = (CEdit*)GetDlgItem(IDC_RULE);

edit->GetWindowText(rule);

editor.rule = rule;
...全文
971 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
maowu 2005-01-24
  • 打赏
  • 举报
回复
sorry啊各位兄弟,是我的疏忽。你们的建议都是可行的。
lw1a2 2005-01-24
  • 打赏
  • 举报
回复
楼主的问题不是解决了,结贴了吗,怎么帖子还在?
whoho 2005-01-24
  • 打赏
  • 举报
回复
虽然CString 不同于 string
但是CString定义了向const char*的类型转换,所以CString是可以直接赋值给string的
hanhai118 2005-01-24
  • 打赏
  • 举报
回复
你的CString 和string之间没有类型的转换阿 竟然没有提示错误吗

两个不同的类怎么能直接赋值呢?
Henry0 2005-01-24
  • 打赏
  • 举报
回复
楼主,你的rule 是CString的吧,和string类型不能直接比较哟

string temp_rule = rule.GetBuffer(0);

if (std::find(myVector.begin(), myVector.end(), temp_rule) != myVector.end())
pengzhenwanli 2005-01-24
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
vector<string> vec;
vec.push_back("12345");
vec.push_back("12345");
string rule("12345");
vector<string>::iterator iter;
iter = vec.begin();

for(;iter<vec.end();iter++)
{
if(*iter==rule)
{
cout << "equal" << endl;
}
}

}

这个程序没有问题啊。你看一下。输出两个equal.
没错啊
maowu 2005-01-23
  • 打赏
  • 举报
回复
忘了说,editor.rule 不是CString,是std::string。
vector也是std的vector。



再附上把字符串读到vector的代码:
ifstream in(inputFileName);
ofstream out("D:\\xxxx");

string s;

while(getline(in, s))
{
myVector.push_back(s);
=================================================



“使用clib的strcmp来比较看看哪儿不同。”
能不能给个例子?我是c++新手。。

======================================================
pengzhenwanli 2005-01-23
  • 打赏
  • 举报
回复
字符串好像没有这么比较的吧?
再说了。这个rule应该使CString类型的。
你至少应该转换成相同的类型吧。
这个等于运算符可能没有重载。
你可以写一个比较的adapter
xiaolizi 2005-01-23
  • 打赏
  • 举报
回复
if (rule == *c_iter)这航代码应该是不会错的,你的vector是什么的容器?实在不行,使用clib的strcmp来比较看看哪儿不同。

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧