首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索文件?

搜索文件?
EN

Stack Overflow用户
提问于 2013-01-19 21:27:56
回答 3查看 136关注 0票数 0

这段代码是索引文件的更大代码的一部分,它对每个文件中的单词进行标记化,以便您能够在大量文件中搜索某个单词。(像谷歌一样)

此函数用于在文件中搜索您想要查找的单词。但是我不完全理解它是如何工作的!

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

此外,我还有几个问题: 1)在"infile“中到底是什么? 2)内置函数c_str()做了什么? 3)为什么变量"currentlineno”从1开始?文件的第一行不能从0开始吗? 4) ++x和x++有什么区别? 5)条件"currentlineno < lineNumber“和"currentlineno != lineNumber”有什么区别?

代码如下:

代码语言:javascript
复制
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();
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-19 21:47:49

此函数显示相应行号处的行,并按参数传递。

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

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

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

4/ ++x是前增量,x++是后增量。当您使用++x时,x在使用它之前递增,否则,使用x++时,x在之后递增。

代码语言:javascript
复制
int x = 1;
cout << ++x; // display 2
x = 1;
cout << x++; // display 1

5/查看运算符:http://www.cplusplus.com/doc/tutorial/operators/

票数 0
EN

Stack Overflow用户

发布于 2013-01-19 21:42:09

1)“infile”到底是什么?

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

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

获取存储在std::string类中的文本的常量char*表示是必需的。Link

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

ANS::依赖于函数DisplayResult的第二个输入参数。

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

ANS::参见this。你可能听说过Post-Increment和Pre-Increment。

5)条件"currentlineno < lineNumber“和"currentlineno != lineNumber”有什么区别?

当condition为currentlineno < lineNumber时,currentlineno的值不应超过lineNumber的值。当condition为currentlineno != lineNumber时,currentlineno的值可以大于或小于lineNumber的值,但不应等于lineNumber的值。

票数 0
EN

Stack Overflow用户

发布于 2013-01-19 22:54:50

此函数不搜索单词。

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

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

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

其他问题:

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

2)内置于标准库string类中的成员函数c_str()将一个指向字符串内容的指针作为一个不可修改的、以nul结尾的字符数组返回,这是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指令或声明。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14414845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档