我正在尝试从文件中读取文件,并将文件中所有单词的索引发送到与其首字母对应的数组
例如,我的输入文件类似于
[1] 你好鲍勃 [2] 你好吗
我的输出应为
[A] 是,2 [B] 鲍勃,1 [H] 嗨,1 怎么样,2 [Y] 你,2
我创建了一个数组[10] - z [10],它将存储所有以'A'开头的单词 - 'Z' 我被困在如何检查单词的第一个字符,然后检查它是否属于ABC..etc数组,然后放入页码。
void Parser :: checkWord(){
if(buffer == 'a'){
word<<a[];
}
if(buffer == 'b'){
word<<b[];
}
if(buffer == 'c'){
word<<c[];
}
if(buffer == 'd'){
word<<d[];
}
if(buffer == 'e'){
word<<e[];
}
if(x == 'f'){
word<<f[];
}
if(x == 'g'){
word<<g[];
}
if(buffer == 'h'){
word<<h[];
}
if(buffer == 'i'){
word<<i[];
}
if(buffer == 'j'){
word<<j[];
}
if(buffer == 'k'){
word<<k[];
}
if(buffer == 'l'){
word<<l[];
}
if(buffer == 'm'){
word<<m[];
}
if(buffer == 'n'){
word<<n[];
}
if(buffer == 'o'){
word<<o[];
}
if(buffer == 'p'){
word<<p[];
}
if(buffer == 'q'){
word<<q[];
}
if(buffer == 'r'){
word<<r[];
}
if(buffer == 's'){
word<<s[];
}
if(buffer == 't'){
word<<t[];
}
if(buffer == 'u'){
word<<u[];
}
if(buffer == 'v'){
word<<v[];
}
if(buffer == 'w'){
word<<w[];
}
if(buffer == 'x'){
word<<x[];
}
if(buffer == 'y'){
word<<y[];
}
if(buffer == 'z'){
word<<z[];
}
}
答案 0 :(得分:1)
这是您问题第二部分的解决方案。如何维护索引并为其生成一些输出。第一部分,我肯定会在其他答案中处理。
一旦您从文件中读取了您的单词并且您知道了所在的页面,您所要做的就是拨打UpdateIndex(...)
,如下面的代码所示。完成阅读后,请致电PrintIndex()
以产生输出。
在UpdateIndex中,您还可以看到如何访问单词的第一个字符。
#include <string>
#include <cstdint>
#include <map>
#include <vector>
#include <iostream>
typedef std::vector<uint32_t> PageList;
typedef std::map<std::string,PageList > WordToPageMap;
typedef std::map<char,WordToPageMap > IndexMap;
void UpdateIndex( IndexMap& indexMap, const char * word, uint32_t page )
{
if( strlen(word) > 0 )
{
indexMap[word[0]][word].push_back(page);
}
}
void PrintIndex( const IndexMap& indexMap )
{
for( auto& alpha : indexMap )
{
std::cout << "[" << alpha.first << "] ";
for( auto& word : alpha.second )
{
std::cout << word.first << " ";
for( auto& page : word.second )
{
std::cout << page << ",";
}
}
std::cout << std::endl;
}
std::cout << std::endl;
}
void TestIndexStuff()
{
IndexMap indexMap;
UpdateIndex( indexMap, "hi", 1 );
UpdateIndex( indexMap, "bob", 1 );
UpdateIndex( indexMap, "how", 2 );
UpdateIndex( indexMap, "are", 2 );
UpdateIndex( indexMap, "you", 2 );
PrintIndex( indexMap );
}
int main(int argc, const char* argv[])
{
TestIndexStuff();
return 0;
}
运行它,产生如下输出:
./a.out
[a] are 2,
[b] bob 1,
[h] hi 1,how 2,
[y] you 2,
答案 1 :(得分:0)
我会使用正则表达式将您的输入分解为单词。然后使用每次单词实际上是页码时递增的变量来关注页码。 使用子字符串来切掉每个实际单词的第一个字母。 每次存储3个数据,将这些数据放入具有3列的数据表中会更容易吗? FirstLetter,PageNo和Word。 然后,当您读取整个文件时,您可以通过FirstLetter,PageNo对数据表进行排序,并迭代生成您的输出。