我无法在2D数组“ item”中添加空格。最后,我本质上希望文件(quote.txt)中的数据能够使用其行号正确索引。我已经将数组9(row)乘20(col)做成了文件中最大的句子,而且在没有20列单位的数据的情况下,我想用空格填充它,以便可以对数组进行索引。
我尝试使用向量vector,但是它变得超级混乱。
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <array>
#include <string>
using namespace std;
int main()
{
string file_name;
ifstream fin("quote.txt");
while(!fin)
{
cout << "Error Opening File! Try again!" << endl;
cout << "Enter file name: ";
cin >> file_name;
}
string item[9][20];
for (int row = 0; row < 9; row++)
{
for (int col = 0; col < 20; col++)
{
fin >> item[row][col];
//cout << item[row][col] << endl;
}
}
for (int k = 0; k < 20; k++)
{
cout << item[0][k] << endl;
}
}
说明:我正在尝试使用quote.txt中的内容填充项目2d数组,但是由于句子长度不同,因此我无法使用for循环并说列为20个单位,因为它会渗入下一行并拧紧索引。我的解决方案是我想添加一个空格(填充符),以便可以循环使用for循环,并且每行中的每个内容都有20列。这样,我可以使用行索引来查看文本文件中的每一行。基本上,我希望文本文件是一个2D数组,在其中可以使用[row] [col]索引找到每个元素(单词)。
文本文件:“ quote.txt”
People often say that motivation doesn t last Well neither does bathing that s why we recommend it daily Ziglar
Someday is not a day of the week Denise Brennan Nelson
Hire character Train skill Peter Schutz
Your time is limited so don t waste it living someone else s life Steve Jobs
Sales are contingent upon the attitude of the salesman not the attitude of the prospect W Clement Stone
Everyone lives by selling something Robert Louis Stevenson
If you are not taking care of your customer your competitor will Bob Hooey
The golden rule for every businessman is this: Put yourself in your customer s place Orison Swett Marden
If you cannot do great things do small things in a great way Napoleon Hill
该程序应该做什么?
该程序应该允许我通过用户输入来查找单词。假设单词是“ of”,则假设输出该单词在哪个行号上。同样,如果我输入“ of People”,则会输出行号
答案 0 :(得分:3)
我可能会这样做:
// The dynamic vector of strings from the file
std::vector<std::vector<std::string>> items;
std::string line;
// Loop to read line by line
while (std::getline(fin, line))
{
// Put the line into an input string stream to extract the "words" from it
std::istringstream line_stream(line);
// Add the current line to the items vector
items.emplace_back(std::istream_iterator<std::string>(line_stream),
std::istream_iterator<std::string>());
}
此后,items
向量将包含所有行上的所有单词。例如,items[1]
将是第二行,items[1][2]
将是第二行的第三个单词("not"
带有显示的文件内容)。
按照程序的既定目的(在文件中查找单词或短语,并报告找到的行号),您根本不需要存储行。
您需要做的就是将每一行读入一个字符串,用一个空格替换所有制表符和多个空格,然后查看在该行上是否找到单词(或短语)。如果找到,则将行号存储在向量中。然后在阅读下一行时丢弃当前行。
处理完所有文件后,只需报告矢量中的行号即可。