Задание: Разработать консольные программы для потоковой загрузки в оперативную память содержимого текстового файла, выполнения манипуляций над ним и потокового вывода полученных данных в другой файл.
Строки в новом файле должны быть в обратном порядке, причем выводить только те строки, которые не начинаются с цифры.
1. Код программы
lab#1_1.cpp
| Код |
#include <fstream> #include <iostream> #include <string>
using namespace std;
int count_strings (); //число строк в файле
int main (void){ int i; char **str_arr, str[255]; //чтение str_arr = new char *[count_strings()];
ifstream in_file("input.txt"); if (!in_file){ cout << "Failed to open 'input.txt'"; return -1;} for (i = 0; !in_file.eof(); i++){ in_file.getline(str, 254); str_arr[i] = new char[strlen(str) + 1]; strcpy(str_arr[i], str); } in_file.close(); //запись ofstream out_file("output.txt"); if (!out_file){ cout << "Failed to open 'output.txt'"; return -1;} for (int j = i - 1; j >= 0; j--) if (str_arr[j][0] < 48 || str_arr[j][0] > 57) out_file << str_arr[j] << endl; out_file.close(); //очистка for (int j = 0; j < i; j++) delete [] str_arr[j]; delete [] str_arr;
return 0; }
//число строк в файле int count_strings (){ int i; char ch; ifstream in_file("input.txt"); if (!in_file){ cout << "Failed to open 'input.txt'"; return -1;} in_file.get(ch); for (i = 0; !in_file.eof();){ if (ch == '\n') i++; in_file.get(ch); } in_file.close(); return i + 1; }
|
lab#1_2.cpp
| Код |
#include <fstream> #include <iostream> #include <vector> #include <algorithm>
using namespace std;
int main (void){ vector<string> str_arr; char str[255]; ifstream in_file("input.txt"); if (!in_file){ cout << "Failed to open 'input.txt'"; return -1;} //чтение while (!in_file.eof()){ in_file.getline(str, 254); str_arr.push_back (str); } in_file.close(); //запись ofstream out_file("output.txt"); if (!out_file){ cout << "Failed to open 'output.txt'"; return -1;} for (vector<string>::iterator it = str_arr.end() - 1; it > str_arr.begin(); it--) if ((*it).at(0) < 48 || (*it).at(0) > 57) out_file << (*it).c_str() << endl; out_file.close(); return 0; }
|
Нужно переделать чтоб программа выполняла:
Разработать консольные программы для потоковой загрузки в оперативную память
содержимого текстового файла, выполнения манипуляций над ним и потокового вывода
полученных данных в другой файл.
Первая программа должна использовать классы из стандартной библиотеки (iostream или
fstream) и для хранения в оперативной памяти использовать динамический массивы,
так чтобы отведенная память была пропорциональна размеру исходного файла.
Вторая программа должна дополнительно использовать класс vector из стандартной
библиотеки для хранения данных в оперативной памяти и выполнения манипуляций
над ними.
Третья программа должна использовать классы платформы .NET.
Задание: Отбросить все символы в строках с номером символа менее 10 и затем
отсортировать строки в алфавитном порядке.
Вот ещё примеры где есть 3.
| Код |
//Инвертировать все строки и затем отсортировать строки в алфавитном порядке. #include "stdafx.h" #include <fstream> #include <iostream> #include <string.h> using namespace std; #define STR_SZ 255 //------------------------------------------------------------------------------------ void main(void) { int c=0; ifstream iFile("input.txt"); ofstream oFile("output.txt"); char ** str=new char*[STR_SZ],*temp; for(int i=0;i<STR_SZ;i++) str[i]=new char[STR_SZ];
if(iFile.is_open())//если файл удалось открыть { while(iFile.getline(str[c++],STR_SZ));//чтение из файла for(int i=0;i<c;i++) strrev(str[i]);//инвертирование строк for(int k=0;k<c;k++) { for(int i=1;i<c-k;i++) { if(strcmp(str[i],str[i-1])<0)//сортировка строк { temp=str[i]; str[i]=str[i-1]; str[i-1]=temp; } }//i }//k for(int i=0;i<c;i++) oFile<<str[i]<<endl;//запись в файл } else oFile<<"Source file not found";//если файл открыть не удалось iFile.close(); oFile.close(); delete[] str; }
|
2
| Код |
#include "stdafx.h" #include <fstream> #include <vector> #include <string>
#define STR_SZ 255
using namespace std;
//------------------------------------------------------------------------------------ void main(void) { ifstream iFile("input.txt"); ofstream oFile("output.txt"); vector<string> str; char * ctemp=new char[STR_SZ]; string stemp; if(iFile.is_open())//если файл удалось открыть { while(iFile.getline(ctemp,STR_SZ)) str.push_back(ctemp);//чтение из файла for(int i=0;i<str.size();i++)//инвертирование строк { strcpy(ctemp,str[i].c_str()); strrev(ctemp); str[i]=string(ctemp); } for(int k=0;k<str.size();k++) { for(int i=1;i<str.size()-k;i++) { if(str[i].compare(str[i-1])<0)//сортировка строк { stemp=str[i]; str[i]=str[i-1]; str[i-1]=stemp; } }//i }//k for(int i=0;i<str.size();i++) oFile<<str[i]<<endl;//запись в файл } else oFile<<"Source file not found";//если файл открыть не удалось iFile.close(); oFile.close(); delete[] ctemp; }
|
3
| Код |
#include "stdafx.h"
using namespace System; using namespace System::IO;
#define STR_SZ 255
void main(void) { array<String^> ^ str=gcnew array<String^>(STR_SZ); array<wchar_t> ^ ctemp; String ^ temp; String ^ in_path="input.txt"; String ^ out_path="output.txt"; int c; StreamReader ^ iFile; StreamWriter ^ oFile=gcnew StreamWriter(out_path); if(File::Exists(in_path)) { iFile=gcnew StreamReader(in_path); for(c=0;iFile->Peek()>=0;c++) str[c]=iFile->ReadLine();//чтение из файла
for(int i=0;i<c;i++)//инвертирование строк { ctemp=str[i]->ToCharArray(); ctemp->Reverse(ctemp); str[i]=gcnew String(ctemp); }
for(int k=0;k<c;k++) { for(int i=1;i<c-k;i++) { if(String::Compare(str[i],str[i-1])<0)//сортировка строк { temp=str[i]; str[i]=str[i-1]; str[i-1]=temp; } }//i }//k for(int k=0;k<c;k++) oFile->WriteLine(str[k]);//запись в файл iFile->Close(); } else oFile->WriteLine("Source file not found"); oFile->Close(); }
|
И ещё: Что означает "->"?
Это сообщение отредактировал(а) Rodman - 4.2.2008, 10:27