此代码是对文件进行索引的较大代码的一部分,并对每个文件中的单词进行标记,以便您能够在大量文件中搜索某个单词。(如谷歌)
这个函数应该在你的文件中搜索你想要查找的单词。但我不完全明白它是如何工作的!
有人能解释一下这段代码是做什么的,是怎么做的吗?
另外,我有几个问题:1)"infile"到底是什么意思?2)内置函数c_str()做什么?3)为什么变量"currentlineno"从1开始?文件的第一行不能从0开始吗?4) ++x和++ +的区别是什么?5)"current - line"one_answers"current - line"的区别是什么?
lineNumber"one_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
指令或声明。