Changing this Java programme into C++ import java.io.BufferedReader; import java
ID: 3787563 • Letter: C
Question
Changing this Java programme into C++
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class AverageWriter {
public static void main(String[] args) {
AverageWriter t = new AverageWriter();
// Used to find average line by line and write in different line of output file
// t.findAverageByLineWriteTo("src/INPUT.TXT","src/OUTPUT.TXT");
// Used to find whole avarage and write in output file
t.findAverageWriteTo("src/INPUT.TXT","src/OUTPUT.TXT");
}
public void findAverageWriteTo(String inputFile, String outputFile) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(inputFile));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
int sum = 0;
int totalNum = 0;
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
if(line != null) {
String[] strArray = line.split(" ");
int[] nums = new int[strArray.length];
for (int i=0; i<strArray.length; i++) {
nums[i] = Integer.parseInt(strArray[i]);
sum += nums[i];
}
totalNum += nums.length;
}
line = null;
line = br.readLine();
}
float average = sum/totalNum;
AverageWriter t = new AverageWriter();
t.writeToFile(outputFile, String.valueOf(average));
System.out.println(average);
String everything = sb.toString();
System.out.println(everything);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void findAverageByLineWriteTo(String inputFile, String outputFile) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(inputFile));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
if(line != null) {
String[] strArray = line.split(" ");
int[] nums = new int[strArray.length];
int sum = 0;
for (int i=0; i<strArray.length; i++) {
nums[i] = Integer.parseInt(strArray[i]);
sum += nums[i];
}
float average = sum/nums.length;
AverageWriter t = new AverageWriter();
t.appendToFile(outputFile, String.valueOf(average));
System.out.println(average);
}
line = null;
line = br.readLine();
}
String everything = sb.toString();
System.out.println(everything);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void writeToFile(String fileName, String content) {
BufferedWriter bw = null;
FileWriter fw = null;
try {
fw = new FileWriter(fileName);
bw = new BufferedWriter(fw);
bw.write(content);
System.out.println("Done");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bw != null)
bw.close();
if (fw != null)
fw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public void appendToFile(String fileName, String content) {
BufferedWriter bw = null;
FileWriter fw = null;
try {
fw = new FileWriter(fileName, true);
bw = new BufferedWriter(fw);
bw.write(content);
bw.newLine();
System.out.println("Done");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bw != null)
bw.close();
if (fw != null)
fw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
Explanation / Answer
//.h file code:
#include <string>
#include <vector>
#include <iostream>
#include "stringbuilder.h"
class AverageWriter
{
static void main(std::vector<std::wstring> &args);
public:
virtual void findAverageWriteTo(const std::wstring &inputFile, const std::wstring &outputFile);
virtual void findAverageByLineWriteTo(const std::wstring &inputFile, const std::wstring &outputFile);
public:
virtual void writeToFile(const std::wstring &fileName, const std::wstring &content);
virtual void appendToFile(const std::wstring &fileName, const std::wstring &content);
};
//stringbuilder.h:
//----------------------------------------------------------------------------------------
// Copyright © 2007 - 2017 Tangible Software Solutions Inc.
// This class can be used by anyone provided that the copyright notice remains intact.
//
// This class is used to replace the Java StringBuilder in native C++.
//----------------------------------------------------------------------------------------
#include <string>
#include <sstream>
class StringBuilder
{
private:
std::wstring privateString;
public:
StringBuilder()
{
}
StringBuilder(const std::wstring &initialString)
{
privateString = initialString;
}
StringBuilder(std::size_t capacity)
{
ensureCapacity(capacity);
}
wchar_t charAt(std::size_t index)
{
return privateString[index];
}
StringBuilder *append(const std::wstring &toAppend)
{
privateString += toAppend;
return this;
}
template<typename T>
StringBuilder *append(const T &toAppend)
{
privateString += toString(toAppend);
return this;
}
StringBuilder *insert(std::size_t position, const std::wstring &toInsert)
{
privateString.insert(position, toInsert);
return this;
}
template<typename T>
StringBuilder *insert(std::size_t position, const T &toInsert)
{
privateString.insert(position, toString(toInsert));
return this;
}
std::wstring toString()
{
return privateString;
}
std::size_t length()
{
return privateString.length();
}
void setLength(std::size_t newLength)
{
privateString.resize(newLength);
}
std::size_t capacity()
{
return privateString.capacity();
}
void ensureCapacity(std::size_t minimumCapacity)
{
privateString.reserve(minimumCapacity);
}
StringBuilder *remove(std::size_t start, std::size_t end)
{
privateString.erase(start, end - start);
return this;
}
StringBuilder *replace(std::size_t start, std::size_t end, const std::wstring &newString)
{
privateString.replace(start, end - start, newString);
return this;
}
private:
template<typename T>
static std::wstring toString(const T &subject)
{
std::wostringstream ss;
ss << subject;
return ss.str();
}
};
//.cpp file code:
void AverageWriter::main(std::vector<std::wstring> &args)
{
AverageWriter *t = new AverageWriter();
// Used to find average line by line and write in different line of output file
// t.findAverageByLineWriteTo("src/INPUT.TXT","src/OUTPUT.TXT");
// Used to find whole avarage and write in output file
t->findAverageWriteTo(L"src/INPUT.TXT",L"src/OUTPUT.TXT");
}
void AverageWriter::findAverageWriteTo(const std::wstring &inputFile, const std::wstring &outputFile)
{
BufferedReader *br = nullptr;
try
{
FileReader tempVar(inputFile);
br = new BufferedReader(&tempVar);
StringBuilder *sb = new StringBuilder();
std::wstring line = br->readLine();
int sum = 0;
int totalNum = 0;
while (line != L"")
{
sb->append(line);
sb->append(System::lineSeparator());
if (line != L"")
{
//JAVA TO C++ CONVERTER TODO TASK: There is no direct native C++ equivalent to the Java String 'split' method:
std::vector<std::wstring> strArray = line.split(L" ");
std::vector<int> nums(strArray.size());
for (int i = 0; i < strArray.size(); i++)
{
nums[i] = std::stoi(strArray[i]);
sum += nums[i];
}
totalNum += nums.size();
}
line = L"";
line = br->readLine();
}
float average = sum / totalNum;
AverageWriter *t = new AverageWriter();
t->writeToFile(outputFile, std::to_wstring(average));
std::wcout << average << std::endl;
std::wstring everything = sb->toString();
std::wcout << everything << std::endl;
}
catch (const IOException &e)
{
e->printStackTrace();
}
//JAVA TO C++ CONVERTER TODO TASK: There is no native C++ equivalent to the exception 'finally' clause:
finally
{
try
{
delete br;
}
catch (const IOException &e)
{
e->printStackTrace();
}
}
}
void AverageWriter::findAverageByLineWriteTo(const std::wstring &inputFile, const std::wstring &outputFile)
{
BufferedReader *br = nullptr;
try
{
FileReader tempVar(inputFile);
br = new BufferedReader(&tempVar);
StringBuilder *sb = new StringBuilder();
std::wstring line = br->readLine();
while (line != L"")
{
sb->append(line);
sb->append(System::lineSeparator());
if (line != L"")
{
//JAVA TO C++ CONVERTER TODO TASK: There is no direct native C++ equivalent to the Java String 'split' method:
std::vector<std::wstring> strArray = line.split(L" ");
std::vector<int> nums(strArray.size());
int sum = 0;
for (int i = 0; i < strArray.size(); i++)
{
nums[i] = std::stoi(strArray[i]);
sum += nums[i];
}
float average = sum / nums.size();
AverageWriter *t = new AverageWriter();
t->appendToFile(outputFile, std::to_wstring(average));
std::wcout << average << std::endl;
}
line = L"";
line = br->readLine();
}
std::wstring everything = sb->toString();
std::wcout << everything << std::endl;
}
catch (const IOException &e)
{
e->printStackTrace();
}
//JAVA TO C++ CONVERTER TODO TASK: There is no native C++ equivalent to the exception 'finally' clause:
finally
{
try
{
delete br;
}
catch (const IOException &e)
{
e->printStackTrace();
}
}
}
void AverageWriter::writeToFile(const std::wstring &fileName, const std::wstring &content)
{
BufferedWriter *bw = nullptr;
FileWriter *fw = nullptr;
try
{
fw = new FileWriter(fileName);
bw = new BufferedWriter(fw);
bw->write(content);
std::wcout << std::wstring(L"Done") << std::endl;
}
catch (const IOException &e)
{
e->printStackTrace();
}
//JAVA TO C++ CONVERTER TODO TASK: There is no native C++ equivalent to the exception 'finally' clause:
finally
{
try
{
if (bw != nullptr)
{
delete bw;
}
if (fw != nullptr)
{
delete fw;
}
}
catch (const IOException &ex)
{
ex->printStackTrace();
}
}
}
void AverageWriter::appendToFile(const std::wstring &fileName, const std::wstring &content)
{
BufferedWriter *bw = nullptr;
FileWriter *fw = nullptr;
try
{
fw = new FileWriter(fileName, true);
bw = new BufferedWriter(fw);
bw->write(content);
bw->newLine();
std::wcout << std::wstring(L"Done") << std::endl;
}
catch (const IOException &e)
{
e->printStackTrace();
}
//JAVA TO C++ CONVERTER TODO TASK: There is no native C++ equivalent to the exception 'finally' clause:
finally
{
try
{
if (bw != nullptr)
{
delete bw;
}
if (fw != nullptr)
{
delete fw;
}
}
catch (const IOException &ex)
{
ex->printStackTrace();
}
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.