Консультация № 177984
22.04.2010, 19:07
43.38 руб.
0 12 2
Напишите, пожалуйста, программу на С++:
Создать текстовый файл.
Отсортировать в нем слова по длине.
Спасибо.

Обсуждение

Неизвестный
23.04.2010, 01:02
общий
Я так понимаю что текстовый файл создаётся в ручную?Вот фрагмент кода в котором выводится на консоль по длине.Если не умеете перенаправить в файл другой или тот же пишите,изменим.Вопщем свои пожелания.


#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
FILE* in;char* mass=new char;
for(int i=1;i<20;i++){ //sdes ustanavlivaem dlinu slov
in=fopen("1.txt","r");

while(fscanf(in,"%s",mass) != EOF){
if(strlen(mass) == i){
cout<<mass<<"\n";
}}
delete[]mass;
fclose(in);}
system("PAUSE");
return EXIT_SUCCESS;
}
Неизвестный
23.04.2010, 01:32
общий
большое спасибо.
А можно создать файл в программе, заполнить его, распечатать, а затем открыть на чтение и сортировку, и напечатать новый полученный файл?
Спасибо
Неизвестный
23.04.2010, 01:36
общий
Заполнить его через консоль?
Неизвестный
23.04.2010, 01:47
общий
да, ввести слова на экране
Неизвестный
23.04.2010, 01:49
общий
Если сегодня не успею то завтра днём выложу код.
Неизвестный
23.04.2010, 02:02
общий
большое спасибо, не торопитесь, мне сдавать в субботу
Неизвестный
23.04.2010, 05:02
общий
Програма создаст файлы автоматически,отсортирует и запишет всё куда надо.Если такой вариант вам подходит я её вставляю в ответ.Ещё проверьте может где то что и не досмотрел.



#include <cstdlib>
#include <iostream>

using namespace std;
void sort();
int main(int argc, char *argv[])
{
FILE *in;char* mass1=new char;int a;
metka:cout<<"Slovo-->1,Sortirovka-->2,Raspeciatat 1.txt:-->3"<<"\n";
cin>>a;
if(a == 1){
in=fopen("1.txt","a");
cin>>mass1;
fprintf(in,"%s%s",mass1,"\n");
fclose(in);
delete[]mass1;
goto metka;}

if(a == 2) sort();

if(a == 3){
in=fopen("1.txt","r");
while(fscanf(in,"%s",mass1) != EOF){ //vyvodim soderzimoje faila 2.txt
cout<<mass1<<"\n";}
fclose(in);
goto metka;}

system("PAUSE");
return EXIT_SUCCESS;
}

void sort(){
FILE *out,*in;char* mass=new char;

in=fopen("2.txt","w");
fprintf(in,""); //ocisciajem fail 2.txt dlia novoj sortirovki
fclose(in);

for(int i=1;i<20;i++){ //sdes ustanavlivaem dlinu slov
out=fopen("1.txt","r");
in=fopen("2.txt","a");
while(fscanf(out,"%s",mass) != EOF){
if(strlen(mass) == i){
fprintf(in,"%s%s",mass,"\n");
}}
delete[]mass;
fclose(out);
fclose(in);}

out=fopen("2.txt","r");
while(fscanf(out,"%s",mass) != EOF){ //vyvodim soderzimoje faila 2.txt
cout<<mass<<"\n";}
fclose(out);
}
давно
Академик
320937
2216
23.04.2010, 09:05
общий
sveta11115:
А надо на C или на C++?
Неизвестный
23.04.2010, 13:21
общий
это ответ
Здравствуйте, sveta11115.
Решение в приложении

Приложение:
#include <fstream>
#include <iostream>
#include <conio>
#include <string>

using namespace std;

typedef unsigned char byte;

void main(int argc, char* argv[])
{
fstream tf("Words", ios::out|ios::trunc);
if (!tf) {
cout << "The file can not be created";
getch();
return;
}

string word = "";
byte wordCount = 0;
cout << "Enter words" << endl << "Type "stop" to finish" << endl << endl;
do {
tf.write(word.c_str(), word.length());
cin >> word;
wordCount++;
word += ',';
}
while (word != "stop,");
wordCount--;
tf.close();

cout << endl << "Words position before sorting:" << endl;
tf.open("Words", ios::in);
string *words = new string[wordCount];
for (byte i(0); i < wordCount; i++) {
words[i] = "";
char cBuf;
tf.read(&cBuf, 1);
do {
words[i] += cBuf;
tf.read(&cBuf, 1);
}
while (cBuf != ',');
cout << words[i];
if (i != wordCount - 1) cout << ", ";
}
tf.close();

for (byte i(0); i < wordCount - 1; i++)
for (byte j(i+1); j < wordCount; j++)
if (words[i].length() < words[j].length()) {
word = words[i];
words[i] = words[j];
words[j] = word;
}

cout << endl << endl << "Words position after sorting:" << endl;
tf.open("Words", ios::out|ios::trunc);
for (byte i(0); i < wordCount; i++) {
tf.write(words[i].c_str(), words[i].length());
tf.write(",", 1);
cout << words[i];
if (i != wordCount - 1) cout << ", ";
}
tf.close();

getch();
return;
}
5
Большое спасибо за помощь.<br>Не возникло никаких дополнительных вопросов к тексту программы.<br>Все понятно.
Неизвестный
23.04.2010, 14:38
общий
это ответ
Здравствуйте, sveta11115.


#include <cstdlib>
#include <iostream>

using namespace std;
void sort();
int main(int argc, char *argv[])
{
FILE *in;char* mass1=new char;int a;
metka:cout<<"Slovo-->1,Sortirovka-->2,Raspeciatat 1.txt:-->3"<<"\n";
cin>>a;
if(a == 1){
in=fopen("1.txt","a");
cin>>mass1;
fprintf(in,"%s%s",mass1,"\n");
fclose(in);
delete[]mass1;
goto metka;}

if(a == 2) sort();

if(a == 3){
in=fopen("1.txt","r");
while(fscanf(in,"%s",mass1) != EOF){ //vyvodim soderzimoje faila 2.txt
cout<<mass1<<"\n";}
fclose(in);
goto metka;}

system("PAUSE");
return EXIT_SUCCESS;
}

void sort(){
FILE *out,*in;char* mass=new char;

in=fopen("2.txt","w");
fprintf(in,""); //ocisciajem fail 2.txt dlia novoj sortirovki
fclose(in);

for(int i=1;i<20;i++){ //sdes ustanavlivaem dlinu slov
out=fopen("1.txt","r");
in=fopen("2.txt","a");
while(fscanf(out,"%s",mass) != EOF){
if(strlen(mass) == i){
fprintf(in,"%s%s",mass,"\n");
}}
delete[]mass;
fclose(out);
fclose(in);}

out=fopen("2.txt","r");
while(fscanf(out,"%s",mass) != EOF){ //vyvodim soderzimoje faila 2.txt
cout<<mass<<"\n";}
fclose(out);
}
5
Большое спасибо.<br>Очень быстро получила ответ.<br>И все подробно и понятно.
Неизвестный
23.04.2010, 23:21
общий
Valeraja:
Спасиюо большое.
Вроде бы, все так
Неизвестный
23.04.2010, 23:22
общий
lamed:
на C++
Форма ответа