搜索文件

searching files?

本文关键字:文件 搜索      更新时间:2023-10-16

此代码是对文件进行索引的较大代码的一部分,并对每个文件中的单词进行标记,以便您能够在大量文件中搜索某个单词。(如谷歌)

这个函数应该在你的文件中搜索你想要查找的单词。但我不完全明白它是如何工作的!

有人能解释一下这段代码是做什么的,是怎么做的吗?

另外,我有几个问题:1)"infile"到底是什么意思?2)内置函数c_str()做什么?3)为什么变量"currentlineno"从1开始?文件的第一行不能从0开始吗?4) ++x和++ +的区别是什么?5)"current - line"answers"current - line"的区别是什么?

lineNumber"answers"currentlineno != lineNumber" ?

这是代码:

void DisplayResult(string fileName, int lineNumber)
{
ifstream infile(fileName.c_str(), ifstream::in);
char line[1000];
int currentlineno = 1;
while(currentlineno < lineNumber) 
{
    infile.getline(line, 1000);
    ++currentlineno;
}
infile.getline(line, 1000);
cout<<endl<<"nResult from ("<<fileName<<" ), line #"<<lineNumber<<": "<<endl;
cout<<"t"<<line;
infile.close();
}

该函数显示按参数传递的行号对应的行。

1/Infile允许打开一个文件,如put streams: http://www.cplusplus.com/reference/fstream/ifstream/

2/c_str()允许将字符串结构传递给一个简单的char* (char数组)。它是C语言中使用的结构,这解释了为什么方法名称为"c_str"。在c++中,我们通常使用string而不是char*,因为它确实更简单。

3/为什么currentlinno从1开始?函数读取给定行号之前的文件内容。,再读一次以显示所需的行。

4/++x为前递增,x++为后递增。当你使用++x时,x在使用前递增,否则,使用++x, x在使用后递增。

int x = 1;
cout << ++x; // display 2
x = 1;
cout << x++; // display 1

5/查看操作符:http://www.cplusplus.com/doc/tutorial/operators/

1)"inffile"到底是什么?

ANS::构造对象并可选地打开文件。链接

2)内置函数c_str()做什么?

ANS::需要获取存储文本的const char*表示在std::string类中。链接

3)为什么变量"currentlineno"从1开始?文件的第一行不能从0开始吗?

ANS::取决于函数DisplayResult的第二个输入参数。

4) ++x和++的区别是什么?

ANS::看这个。你可能听说过Post-Increment和Pre-Increment。

5)条件"currentlineno <</strong>

ANS::当条件为currentlineno < lineNumber时,currentlineno的值不能超过lineNumber的值。当条件为currentlineno != lineNumber时,currentlineno的值可以大于或小于lineNumber的值,但不能等于lineNumber的值

此函数不搜索单词。

它接受文件名和行号作为输入。它试图找到并读取该行。

输出以一行开始:" result from (fileName), line # lineNumber: "它后面是一个用制表符缩进的文本,后面是找到的行内容。第二行输出是不完整的(后面没有换行符)。

如果文件的行数少于请求的行数,或者请求行之前的任何行超过999个字符,则找到的内容为空。如果请求的行超过999个字符,它将被截断为999个字符。

其他问题:

1) infile是一个自动存储持续时间和类型为std::basic_ifstream<char, std::char_traits<char>>的函数作用域对象,它被初始化为从fileName中命名的文件中读取。

2)标准库string类内建的成员函数c_str()返回一个指向字符串内容的指针,作为不可修改的、以空结束的字符数组,这是C语言中通常用于字符串(类型为const char *)的格式。由于历史原因,基于文件的标准库流以这种格式接受文件名参数。

3)人类通常计数以1开头的行号。这是lineNumber参数使用的约定。所使用的算法必须与此匹配。currentlineno局部变量用于表示"要读取的下一行的编号"。因此,它必须用1初始化。(考虑到变量的名称,这有点令人困惑。)用0初始化行计数器的其他实现也是可能的——这对大多数c++程序员来说确实很自然。

4)查看任何c++的教科书或在线参考资料。查找"前增量"(++x)和"后增量"(x++)操作符。它们具有相同的副作用(增加x),但表达式的值不同。如果不使用结果,则它们是等效的(对于基本类型)。c++程序员通常更喜欢预增量,因为对于用户定义的类型,它通常可以更有效地实现。

5)更基本的教科书问题。a < b测试小于关系,a != b测试不相等。

注意:所有的答案都假设所使用的类型来自标准c++库,即使用适当的<string><iostream>头和必要的using指令或声明。