我首先要说的是,这是一项家庭作业,但我的老师对如何做事真的不太清楚。
我被要求在c ++中编写一个函数,它将一次传递一个文件中的单词。该函数将计算字长,然后在其自己的行上打印出TO SCREEN字及其长度。
main将打开您的输入文件,在循环中逐字读取,然后将该单词传递给您的函数以便打印。
我知道如何使用fstream和所有这些来打开文件,逐字逐句读取,但不能通过void readfile()读取循环或函数。我的问题是把所有东西放在一起。
这是我打开文件,获取长度并以并行数组显示它的程序
//declare parallel arrays
string words [MAXSIZE];
//open files
outputFile.open("output.txt");
inputFile.open ("/Users/cathiedeane/Documents/CIS 22A/Lab 4/Lab 4 Part 2/lab4.txt");
//inputvalidation
while (!inputFile.eof())
{
for(int i = 0; i < MAXSIZE; ++i)
{
outputFile << words[i] << " " << endl;
inputFile >> words[i];
}
inputFile.close();
}
for (int i= 0; i <= MAXSIZE; i++)
{ cout << words[i] << ":" << words[i].size()<< endl;
outputFile << endl;
}
//close outputfile
outputFile.close();
return 0;
}
答案 0 :(得分:0)
所以基本上你的任务是:
function read_word
/* what you have to work on */
end
function read_file_word_by_word
open file
while not end_of_file
word = read_word
print word, word_length
end
close file
end
要阅读单词,您需要定义它是什么。通常它是一堆字母,由其他不是字母的字符(空格,逗号等)分隔。
您可以逐个字符地阅读文件,并在它们是字母时存储它们,直到您遇到其他类型的字符。你存储的是一个单词,你可以很容易地得到它的长度。
提示:http://www.cplusplus.com/reference/istream/istream/get/允许您从文件中读取单个字符。
答案 1 :(得分:0)
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
void func(const string& word)
{
//set field width
cout.width(30);
cout << left << word << " " << word.size() << endl;
}
int main(int argc, char* argv[])
{
ifstream ifs("F:\\tmp\\test.txt");
if(ifs.fail())
{
cout << "fail to open file" << endl;
return -1;
}
_Ctypevec ct = _Getctype();
for(char ch = 0; ch < SCHAR_MAX; ch++)
{
//set all punctuations as field separator of extraction
if(ispunct(ch))
{
(const_cast<short*>(ct._Table))[ch] = ctype<char>::space;
}
}
//change the default locale object of ifstream
ifs.imbue(locale(ifs.getloc(), new ctype<char>(ct._Table)));
string word;
while(ifs >> word)
{
func(word);
}
ifs.close();
}
答案 2 :(得分:0)
既然你提出问题已经过了一段时间了,我想补充一点,这可以用很少的代码来解答:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void printString( const string & str ) { // ignore the & for now, you'll get to it later.
cout << str << " : " << str.size() << endl;
}
int main() {
ifstream fin("your-file-name.txt");
if (!fin) {
cout << "Could not open file" << endl;
return 1;
}
string word; // You only need one word at a time.
while( fin >> word ) {
printString(word);
}
fin.close();
}
关于fin >> word
的一个小注释,只要有一个单词读入字符串,该表达式就返回true。默认情况下,它也会跳过任何空格(制表符,空格和换行符)。
答案 3 :(得分:0)
您显然希望将每个单词分隔到其自己的string
索引中,以将它们存储在您的数组中。要分隔每个单词,请建立一个断点,如char break = ' ';
然后,当您的IOStream
正在读取文件时,只需使用迭代器(i ++)将单词添加到索引