Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2019, 10:48   #1
kernitskiy
Новичок
Джуниор
 
Регистрация: 24.10.2019
Сообщений: 1
Сообщение Ограничение строк и символов

Здравствуйте! Прошу помощи.
Имеется следующая задача:
В произвольном тексте (взятом из файла), содержащем не более 10 строк, в каждой строке не более 80 символов, необходимо перенести первую букву каждого слова в его конец. Отсортировать строки в порядке убывания количества слов. записать в файл с заданным пользователем именем. Вывести полученный текст на экран.

Проблема заключается в том, что я не могу ограничить количество строк и символов в строке, строки вроде ограничиваются указанием размера QUAN но если ввожу больше 10 строк он обрезает лишние но тогда сортировать строки в порядке убывания количества слов отказывается, а вот с количеством символов не больше 80 в строке вообще ничего так и не получилось, пробовал и с erase и с substr в итоге никак, буду благодарен за помощь и советы!

Код главной функции
Код:
#include "string"
#include "iostream"
#include "fstream"
#include "algorithm"
#include "sstream"
#include "cctype"
#include "locale.h"
#include "windows.h"
#define QUAN 10
using namespace std;
 
size_t change(string &str);  // прототип функции перестановки
 
int main()
{
    setlocale(LC_ALL, "Russian");
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    size_t i = 0,
        j = 0,
        value[QUAN];
    string text[QUAN]; 
    string filename, filename2;
 
    // чтение файла
    cout << "Введите имя файла для открытия :\n";
    getline(cin, filename);
    ifstream infile(filename.c_str());
    if (!infile)
    {
        cerr << "Внимание! Ошибка: Не могу открыть файл!\n";
    }
      
    else
        cout << "Файл для чтения успешно открыт!\n";
    {
        while (getline(infile, text[i]))  
        {
            cout << text[i] << '\n';  
            value[i] = change(text[i]);    
            i++;
        }
 
                
        for (j = 1; j < QUAN; j++)
            for (i = 0; i < QUAN - j; i++)
            {
                if (value[i + 1] > value[i])
                {
                    swap(value[i + 1], value[i]);
                    swap(text[i + 1], text[i]);
                }
            }
    }
    cout << endl;
    // записываем 
    cout << "Введите имя файла для записи :\n";
    getline(cin, filename2);
    ofstream outfile(filename2.c_str());    
 
    if (!outfile)
    {
        cerr << "Внимание! Ошибка: Не могу открыть файл!\n";
        return (1);
    }
    else
        cout << "Файл для записи успешно открыт!\n";
    {
        for (i = 0; i < QUAN; ++i)
        {
            if (!text[i].empty())
            {
                outfile << text[i] << '\n'; 
                cout << text[i] << '\n'; 
            }
        }
    }
    infile.close();
    outfile.close();
    system("pause");
    return (0);
}
Функция переноса первой буквы в конец слова:
Код:
#include "string"
#include "iostream"
#include "fstream"
#include "algorithm"
#include "sstream"
#include "cctype"
#include "windows.h"
using namespace std;
 
//  функция возвращает количество слов в строке и преобразует каждую строчку 
size_t change(string &str)
{
    setlocale(LC_ALL, "Russian");
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    size_t count = 0, 
 
        beg = 0, 
 
        fin = 0; 
 
    string tmpstring;  
 
    stringstream stream(str); 
 
    while (stream >> str) // разбиваем строку на слова
    {
 
        for (beg = 0; beg < str.length(); beg++)
        {
            if (iswalnum((unsigned char)str[beg])) break;
        }
 
        for (fin = str.length() - 1; fin > 0; fin--)
        {
            if (iswalnum((unsigned char)str[fin])) break;
        }
 
        str.insert(fin + 1, str.substr(beg, 1)); 
 
        str.erase(beg, 1); 
 
        count++;
 
        tmpstring += (' ' + str);
    }
    str = tmpstring;  
    return count;  
}
kernitskiy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ограничение символов Grimnir69 Помощь студентам 11 10.12.2012 23:27
Ограничение текста до 5 символов Shouldercannon Общие вопросы Delphi 8 13.08.2010 16:07
Ограничение по количеству символов Shouldercannon Общие вопросы Delphi 3 27.04.2009 16:33
Ограничение на ввод символов ANTI1 Общие вопросы Delphi 4 17.12.2008 16:30
Ограничение на вводимое кол-во символов??? serjii Microsoft Office Excel 3 05.10.2007 10:55