使用C 计数字符串中的情况敏感单词
Counting case-sensitive words in a string using C++
我想计算字符串 s
中有多少个唯一和情况敏感的单词。到目前为止,我将标点转换为空间,并将每个单独的单词(由空间隔开)添加到一个集合中。由于set
仅包含唯一的元素,因此以下功能返回1
。但是,由于字符串s
具有2个敏感单词(ab
和AB
)。
我如何检查字符串s?
中单词的情况敏感性bool isWordSeparator(char c) {
return std::isspace(c) || std::ispunct(c);
}
int main() {
string s = "abnAB!ab?AB:ab.AB;abnAB";
transform(s.begin(), s.end(), s.begin(), [](char c)->char {
if (isWordSeparator(c))
return ' ';
});
istringstream iss(s);
set<string> words((istream_iterator<string>(iss)), istream_iterator<string>());
cout << "Number of Words: " << words.size() << endl;
return 0;
}
这里的问题实际上并不是案例灵敏度。是与您向transform
提供的lambda。
您正在尝试用空格替换分离器。不幸的是,如果isWordSeparator
返回true
,则您返回空间时,您无法返回否则否则。
将您的transform
更改为这样的东西:
transform(s.begin(), s.end(), s.begin(), [](char c)->char {
if (isWordSeparator(c))
return ' ';
else
return c;
});
...获得有用结果的机会将大大提高。
相关文章:
- 文本文件中的单词链表
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 函数中堆分配的效果与缺少堆分配的情况
- 在指针的帮助下,文本文件中单词的频率
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在C 中不带有弦乐和strtok的情况下拆分字符串(提取单词)
- 我可以在不循环访问数组/向量的情况下检查数组/向量中的单词吗?
- 尝试创建一个读取.txt文件,显示它,计数唯一单词的程序,并在使用了多少次的情况下显示独特的单词.C
- 如何在不破坏单词的情况下将字符串拆分为行
- 使用C 计数字符串中的情况敏感单词
- 在c++中,如何在没有辅助方法的情况下反转句子中的单词
- 如何使用c++在没有读线的情况下显示字符串中的多个单词
- 如何在不截断单词的情况下换行
- 如何在不更改所有文本颜色的情况下设置单个单词的颜色