搜索文件?

时间:2013-01-19 13:27:56

标签: c++ file search maps

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

此功能应该在您的文件中搜索您要查找的单词。但我不完全明白它是如何运作的!

有人可以解释这段代码的作用以及它是如何做的吗?

另外,我有几个问题: 1)究竟在“infile”中究竟是什么? 2)内置函数c_str()有什么作用? 3)为什么变量“currentlineno”从1开始?文件中的第一行不能从0开始吗? 4)++ x和x ++有什么区别? 5)条件“currentlineno< lineNumber”和“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();
}

3 个答案:

答案 0 :(得分:0)

1)“infile”究竟是什么?

ANS ::构造对象和可选的打开文件。 Link

2)内置函数c_str()有什么作用?

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

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

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

4)++ x和x ++有什么区别?

ANS ::见this。可能你可能听说过后增量和预增量。

5)条件“currentlineno&lt; lineNumber”和“currentlineno!= lineNumber”有什么区别?

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

答案 1 :(得分:0)

此功能显示通过参数传递的相应行号的行。

1 / Infile允许像在put流中一样打开文件:http://www.cplusplus.com/reference/fstream/ifstream/

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

3 /为什么currentlineno从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/

答案 2 :(得分:0)

此功能不搜索单词。

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

输出以一行开头说明:&#34;来自(fileName)的结果,第#lineNumber行:&#34; 接下来是一个由制表符缩进的文本,后面是找到的行内容。第二行输出不完整(后面没有换行符)。

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

其他问题:

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

2)内置于标准库字符串类中的成员函数c_str()返回一个指向字符串内容的指针,作为不可修改的,以空字符结尾的字符数组,这是C中通常用于字符串的格式(类型{ {1}})。由于历史原因,基于文件的标准库流采用此格式的文件名参数。

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

4)参见C ++的任何教科书或在线参考资料。寻找&#34;预增量&#34; (1)和&#34;后增量&#34; (++x)运营商。它们具有相同的副作用(增量x),但表达式的值不同。如果您不使用结果,则它们是等效的(对于基本类型)。 C ++程序员通常更喜欢预增量,因为它通常可以更有效地为用户定义的类型实现。

5)更基本的教科书问题。 x++测试不平等关系,a < b测试不平等。

注意:所有答案都假定使用的类型来自标准C ++库,即适当包含a != b<string>标头以及必要的<iostream>指令或声明。