如果该行包含特定单词 (C++),请打印该行
Print the line if it contains a specific word (C++)
我注意到一个用户有类似的问题,但他们是用python编写的,我正在尝试找出一个c ++解决方案。
我目前正在编写拼写检查器,如果文件包含特定字符串,我正在尝试打印文件中的行。我认为getline()
函数对解决方案很有用,但我不太确定如何在我的情况下使用它。
ifstream inputFileIn(inputFilename);
list inputFile;
string word;
while (inputFileIn >> word)
{
transform(word.begin(), word.end(), word.begin(), ::tolower); //convert words to lowercase to spellcheck
//remove punctuation from the word
for (int i = 0; i < word.length(); i++)
{
if (ispunct(word[i]))
{
word.erase(i--, 1);
}
}
//if spelled incorrectly
if (!wordList.contains(word) && std::string::npos == word.find_first_of("0123456789,:;.!?-() ") && word != "n")
{
inputFile.add(word, 0);
}
}
因此,如果word
在行中,它将打印出共享该行的所有其他单词。我并不是真的在寻找某人来做这件事,但我需要弄清楚如何使用getline()
编辑:
感谢您的回复。我目前正在使用这个
if (!wordList.contains(word) && std::string::npos == word.find_first_of("0123456789,:;.!?-() ") && word != "n")
{
string line;
while (getline(inputFileIn, line))
{
if (line.find(word))
{
cout << "Line is: " << line << 'n' << "Word is: " << word << endl;
}
}
inputFile.add(word, 0);
}
}
但是出于某种原因,if (line.find(word))
总是返回true,即使我这样做if (line.find("....."))
这显然不包含在该行中。
您确实可以使用getline
一次读取一行:
std::string line;
while (std::getline(inputFileIn, line))
{
...
要检查特定单词,如果您想检查单词边界,忽略大小写和标点符号,处理带连字符的单词和其他奇怪情况,您可能会发现使用正则表达式提取每个单词最容易,然后查看它们是否在您的单词列表中。 否则,如果您的单词列表很短,您可以使用 std::string::find
依次搜索行中的每个条目,但如果单词列表很长,这将效率低下,您需要从行中提取候选单词。 这可以粗略地完成:
std::istringstream iss{line};
while (line >> word)
{
...transform / remove punctuation etc...
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 在gem5中打印文件中的所有cache_blocks
- 打印数字图案
- Log4cpp:以UTC/GMT时区打印日期
- 如何使用gdb制作一个可以漂亮地打印每个对象的C++函数