Слова сформированные из первых букв слов каждой строки файла

Уровень сложности:

Имеется текстовый файл. Сформировать новый файл, содержащий слова, сформированные из первых букв слов каждой строки исходного файла. Результат работы программы (вывод) поместить в отдельный текстовый файл (например, out.txt ), продублировав на экране.

Исходный файл original.txt содержит следующий текст:

/* веб-сайт: cppstudio.com, программирование на С++ 
раздел помогите написать программу
форум программистов на С++
исходный код программ на С++
руководство для начинающих программистов на С++ */

Таким образом программа должна открыть данный файл и сформировать слова из него. Количество слов равно количеству строк в исходном файле. То есть из одной строки должно получиться одно слово. Слово формируется из первых букв каждого слова в строке.

Если, вдруг забыли как работать с файлами, читаем статью на сайте.  Результат работы программы показан ниже:

// files.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"
#include <iostream>
#include <fstream> //заголовочный файл для работы с файлами
using namespace std;

int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "rus"); // корректное отображение Кириллицы
    ifstream fin("original.txt"); // открыли файл для чтения
    ofstream fout("out.txt"); // создаём файл для записи

    if (!fin.is_open()) // если файл не открыт
        cout << "Файл не может быть открыт!n"; // сообщить об этом
    else // в случае успешного открытия файла 
    {
        int symbol; //  переменная для временного хранения считываемых символов из файла    
        bool space = false; // переменная флаг, для определения начала слова

        while ( !fin.eof()) // пока не конец файла
        {
            symbol = fin.get(); // считать символ из файла и сохранить в symbol
            if (symbol != ' ') // если считанный символ не пробел 
                space = true; 

            while (symbol != 'n' && !fin.eof()) // пока не конец строки и не конец файла 
            {
                if (symbol != ' ' && space) // если считанный символ не пробел и флаг равен true 
                {
                 fout << (char)symbol; // запись в файл out.txt
                 cout << (char)symbol; // вывод на экран
                 space = false;  
                }
                else
                    if (symbol == ' ') // если считанный символ - пробел
                        space = true; // разрешить записать символ в файл

                symbol = fin.get();// считать символ из файла и сохранить в symbol
            }
            fout << "  "; // запись в файл символов пробела
            cout << "  "; // вывод на экран
        }

        fin.close(); // закрыть файл original.txt
        fout.close(); // закрыть файл out.txt
    }

    cout << endl;
    system("pause");
    return 0;
}

В случае если программа не сможет открыть исходный файл original.txt, на экране появится соответствующее сообщение. Если же исходный файл будет успешно открыт, то программа начнёт посимвольно считывать информацию из файла до тех пор, пока не будет достигнут конец исходного файла original.txt. Переменная-флаг  spac контролирует отбор символов, то есть если следующий символ, после пробела  не является пробелом, то он является первым символом слова. Именно таким образом определяются первые символы слов. Сформированные слова сохраняются в текстовый файл out.txt. Вот результат:

Слова сформированные из первых букв слов каждой строки файла

Следующие статьи помогут вам в решении данной задачи:
Автор: admin
Дата: 12.09.2012
Поделиться:

Комментарии

  1. Arthur

    #include<iostream>
    #include<fstream>
    
    using namespace std;
    const int MAX = 50;  //макс длинна слова
    
    int main()
    {
        setlocale(LC_ALL, "rus");
    
        char ch;
        char lastch;
        char** a;
    
        int m = 0, n = 0, i = 0;
    //------------------------------------------------------------------------
        ifstream fail;
        fail.open("D:\\text.txt");
        bool flag = 0;
    
          for ( fail.get(ch) ;fail;  fail.get(ch))
          {
             if(isalpha(ch) && !flag) flag = 1;
             if(ch == '\n' && flag )
             {
               i++; flag = 0;
             }
          }
          if(flag) i++;
    
          fail.close();
          flag = 0;
    //---------------------------------------------------------------------------
        a = new char*[i];
        for(int x = 0; x<i; x++)
            a[x] = new char[MAX];
    //-----------------------------------------------------------------------
        fail.open("D:\\text.txt");
        fail.get(lastch);
        if(isalpha(lastch))
           {
            a[m][n++] = lastch;  flag = 1;
           }
    
        for( fail.get(ch) ;fail;  fail.get(ch))
           {
            if(isalpha(ch))
                {
                   if(!flag)  flag = 1;
                   if(lastch == ' ' || lastch == '\n'  )
                   {
                     a[m][n++] = ch;
                     a[m][n] = 0;
                   }
                }
    
             if(ch == '\n' && flag  )
                {
                    m++; if(m == i) break;
                    n = 0;
                    lastch = ch;
                    flag = 0;
                    continue;
                }
            lastch = ch;
            }
    //--------------------------------------------------------------------------
         ofstream extfail("D:\\out.txt");
          for(int y = 0; y<i; y++)
          {
              cout<<a[y]<<"  ";
              extfail<<a[y]<<"  ";
          }
        return 0;
    }
  2. Alexander Shein

    Вдруг кому-нибудь пригодится мой код
    
    
    #include <iostream>
    #include<string>
    #include<fstream>
    
    using namespace std;
    
    bool words(char str[40]);
    int main()
    {
    string input;
    char str[40];
    string iFilename, oFilename;
    cout << "Enter input file name" << endl;
     cin >> str;
     words(str);
    
    }
    
    bool words(char str[40])
    {
       string  out;
       char data[100];
       int i=1;
       ifstream input (str,ios_base::in);
       if (!input)
        return false;
            input.getline(data,100);
            input.close();
            out = out+data[0];
        while(data[i+1])
        {
           if((data[i-1]==' ')&&(isalpha(data[i])))
              out = out+data[i];
           i++;
        }
        cout << "out : " << out << endl;
        cout << "data : " << data << endl;
        ofstream output("out.txt", ios_base::out);
        output << out;
    return true;
    }
  3. petruska

    petruska

    Программа работает только с анг раскладкой ( других не пишу)) )

    #include "stdafx.h" // here all libra
    
    int main(int argc, char** argv)
    {
    
    	// get text from file on buffer
    	const int size=20;
    	char buff[size];
    	string roud;
    
    	cout << "Enter roud to file with text:";
    	cin >>roud;
    	ifstream file(roud,ios_base::in);
    	
    	if (!file)
    	{
    		cout << "Error, can't open file!" <<endl;
    		return 0;
    	}
    
    	file.getline(buff, size);
        file.close();
    
        cout << "Text from file: " << buff <<endl;
    
    	// work with text
        vector <char> resolt(0);
        char temp;
    
    	// use strtok function,from resolt cahr array(pch) save first latter on vector(use .push_back())
    	char * pch=strtok(buff," ,.-:");
    	while ( pch != NULL)
    	{
    		temp=pch[0];
    		resolt.push_back(temp);
    		pch=strtok(NULL," ,.-:");
    	}
    
    	// save resolt in new text file
    	cout << "Enter roud to file,were will be save resolt:";
    	cin >>roud;
    	ofstream file2(roud);
    
    	if ( !file2 )
    	{
    		cout << "Error, can't open file" <<endl;
    		return 0;
    	}
    
    	file2 << "Resolt: ";
    	for (int i=0; i < resolt.size(); i++)
    	{
    		file2 << resolt[i];
    	}
    
    	file.close();
        cout << "All information was successfully save!" <<endl;
    
        return 0;
    }
  4. Diamind

    #include<iostream>
    #include<string>
    #include<fstream>
    using namespace std;
    
    void work(string str) //Адресс файла
    {
    
    	ifstream t1(str);
    	ofstream t2("out.txt");
    	string s,buf;
    	int i;
    	while(!t1.eof())
    	{
    		getline(t1,s);   //Считываем строку
    		i=0; 
    		buf+=s[i];       //Добавляем 1 символ строки
    		while(i<s.length()-1)
    			if(s[i]==' ')
    			{
    				buf+=s[++i]; //Добавляем сл. символ
    			}
    			else i++;
    			buf+=" ";
    	}
    	t2<<buf;         //Запись в файл
    	t2.close();
    	cout<<buf;      //Вывод на экран
    }
    int main()
    {
    	setlocale(0,""); 
    	work("test.txt");
    	return 0;
    }
  5. iksv

    #include "stdafx.h"
    #include <iostream>
    #include <fstream> // Библиотека для работы с файлом (ввод/вывод)
    
    using namespace std;
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	setlocale(LC_ALL, "rus"); // корректное отображение Кириллицы
    
    	ifstream fin("origin.txt"); // Открываем файл, откуда будем считывать информацию
    	ofstream fout("out.txt"); // Создаем файл, куда будем вести запись
    
    	char ch; // Запоминание символа
    
    
    	if ( !fin.is_open() ) //Если файл не открылся
    		cout << "Файл не открылся!\n"; // Сообщаем об этом
    	else {
    	bool next=true; // Вводим признак начала нового слова
    	
    	while (!fin.eof()) // Повторять пока файл не кончится
    	{
    		fin.get(ch);
    		if (next==true && ch!=' ') // Если текущий символ является началом нового слово и не является пробелом
    		{
    			fout << ch; // записываем в файл
    			next=false; // Следующий символ не будет являться первым в слове
    		}
    		else if (ch==' ') //Если текущий символ - "Пробел"
    		{
    			next=true; // делаем отметку о начале нового слова
    		}
    		else if (ch=='\n') // Если строка кончилась
    		{
    			fout << ' '; // Записываем в файл "пробел"
    			next=true; // Делаем отметку о начале нового слова
    		}
    	}
    	
    	fin.close(); // Закрыли файл origin.txt
    	fout.close(); // Закрыли файл out.txt
    	}
    	return 0;
    }
  6. Afro

    Afro

    Появилось 2 вопроса:

    1. Русский алфавит не считывает. Как исправить?
    2. Первым символом постоянно считывает «п», не понятно почему?

    • R.E.D.

      R.E.D.

      Скомпилил этот код под виндой в MVS2010, все ок.

      1. Русский алфавит не считывает. Как исправить?
      2. Первым символом постоянно считывает «п», не понятно почему?

      Если вы про свой код спрашиваете, то — код в студию! А если про код на этой странице, то напишите подробнее, в какой ОС запускали программу и чем собирали код.

      • Afro

        Afro

        Компилил в том же mvs, под той же виндой(32), странно.

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.