C++ C++;从地图中删除标点符号
我制作了一个程序,读取一个文本文档,将其放入一个向量中,并使用该向量作为一个地图来跟踪文本文件中的单词及其频率。所有这些都很好,但是需要帮助从地图中删除标点符号。以下是我现在拥有的:C++ C++;从地图中删除标点符号,c++,C++,我制作了一个程序,读取一个文本文档,将其放入一个向量中,并使用该向量作为一个地图来跟踪文本文件中的单词及其频率。所有这些都很好,但是需要帮助从地图中删除标点符号。以下是我现在拥有的: #include<iostream> #include<string> #include<map> #include<algorithm> #include<vector> #include<fstream> using namespace s
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
#include<vector>
#include<fstream>
using namespace std;
void print_frequency(vector<string>&);
int main()
{
ifstream infile;
string word;
vector<string>words;
infile.open("words.txt");
if (infile.fail()) {
cerr << "Can't open file\n";
exit(1);
}
while (infile >> word) {
words.push_back(word);
}
print_frequency(words);
}
void print_frequency(vector<string>&words)
{
map<string, int>M;
for (int i = 0; i<words.size(); i++) {
if (M.find(words[i]) == M.end())
M[words[i]] = 1;
else
M[words[i]]++;
}
sort(words.begin(), words.end());
for (auto it = M.begin(); it != M.end();it++) {
if (ispunct(M[it->first]))
{
M[it->first].erase(it--, 1);
int len = M.size();
}
cout << it->first << " " << it->second << endl;
}
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
无效打印频率(矢量和);
int main()
{
河流充填;
字符串字;
矢量词;
infle.open(“words.txt”);
if(infle.fail()){
cerr>word){
单词。推回(单词);
}
打印频率(字);
}
无效打印频率(矢量和文字)
{
mapM;
对于(int i=0;ifirst]))
{
M[it->first]。擦除(it--,1);
int len=M.size();
}
首先是的,可能应该尽快删除标点符号,否则以后它会变得不必要的复杂。我能够让它工作
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
#include<vector>
#include<fstream>
using namespace std;
void print_frequency(vector<string>&);
int main()
{
ifstream infile;
string word;
vector<string>words;
infile.open("words.txt");
if (infile.fail()) {
cerr << "Can't open file\n";
exit(1);
}
while (infile >> word) {
for (int i = 0; i < word.size(); i++)
{
if (ispunct(word[i]))
{
word.erase(i--, 1);
}
}
words.push_back(word);
}
print_frequency(words);
}
void print_frequency(vector<string>&words)
{
map<string, int>M;
for (int i = 0; i<words.size(); i++) {
if (M.find(words[i]) == M.end())
M[words[i]] = 1;
else
M[words[i]]++;
}
sort(words.begin(), words.end());
for (auto it = M.begin(); it != M.end();it++) {
cout << it->first << " " << it->second << endl;
}
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
无效打印频率(矢量和);
int main()
{
河流充填;
字符串字;
矢量词;
infle.open(“words.txt”);
if(infle.fail()){
cerr>word){
for(int i=0;i 对于(int i=0;i,正如其他人所说,最好的办法似乎是在阅读后立即删除这些字符。为此,我选择std::regex
库:
while (infile >> word) {
std::string new_word = std::regex_replace(word, std::regex(R"([^A-Za-z\d])"), "");
words.push_back(new_word);
}
“([^A-Za-z\d])”
指的是一种模式,它不是(^
)字母(A-Za-z
)而不是数字(\d
)。当然,你可以修改它以适应你的严格需要,我鼓励你熟悉正则表达式语法。对于你来说,代码是不必要的复杂(而且效率低下)(int i=0;在将字符串添加到地图之前删除标点符号不是更有意义吗?