我是一名C ++新手,在掌握一些概念方面遇到了麻烦,特别是在while循环中使用std :: find,检查数组。
我有一些PHP背景,但对C ++ /低级语言来说还是一个新手。我的具体问题是在程序结束时我有while(检查>> word){}循环。 Visual Basic在我的std :: find上给了我一个错误。
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char* argv[]){
//Open the dictionary file(it is called words.txt).
ifstream myFile;
myFile.open("dictionary.txt");
//Define a vector of strings called words.
std::vector<string> dictionary;
//For each word in the dictionary file
string word;
while (myFile >> word){
//Append the word to the words vector.
dictionary.push_back(word);
}
//Open the file to be checked(the file is specified on the command line)
ifstream check;
check.open(argv[2]);
//For each word in that file
while (check >> word){
//check vector dictionary to see if check >> word exists
if (std::find(dictionary.begin(), dictionary.end(), word)){
//If the word is not contained in the dictionary vector print the word.
}
}
return 0;
}
如果这已经得到回答,我很抱歉,但是我已经看了几个主题,并且我会继续查看更多内容,直到我得到它,但我仍然有点失落。我会继续努力解决自己的问题!
感谢您的帮助!
编辑:Visual Basic发出了智能感知错误;但是,当我将while循环更改为此
时,它就消失了while (check >> word){
//check vector dictionary to see if check >> word exists
if (std::find(dictionary.begin(), dictionary.end(), word) == dictionary.end()){
//If the word is not contained in the dictionary vector print the word.
cout << word << endl;
}
}
答案 0 :(得分:3)
你的条件应该是:
std::find(dictionary.begin(), dictionary.end(), word) == dictionary.end()
请注意,在您的情况下,您可以使用map
代替,然后使用
dictionary.count(word) == 0
答案 1 :(得分:2)
我认为您最大的问题之一就是您认为C ++是一种较低级别的语言。你在这些事情上花了很长时间,并且在这个过程中让自己的生活变得更加困难。
我可能更喜欢这样做:
std::ifstream in("dictionary.txt");
// read all the words from the file:
std::vector<std::string> dictionary{std::istream_iterator<std::string>(in),
std::istream_iterator<std::string>() };
// If the words might not already be sorted, sort them:
// std::sort(dictionary.begin(), dictionary.end());
// open the file to check:
std::ifstream check(argv[2]);
// print out the words that aren't in the dictionary:
std::copy_if(std::istream_iterator<std::string>(check),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>(std::cout, "\n"),
[&](std::string const &word) {
return !std::binary_search(dictionary.begin(), dictionary.end(), word);
});
这通常具有显着的速度优势,因为它使用二进制搜索而不是字典中的线性搜索。
答案 2 :(得分:1)
这个怎么样
int len = dictionary.size();
bool flag = true;
for(int i = 0; i < len; i++)
{
if(dictionary[i] == word) {
flag = false;
break;
}
}
if(flag)
cout<<word<<"\n";
else
;