Форум программистов, компьютерный форум CyberForum.ru

Поменять местами слово максимальной и минимальной длины. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ М - и Т- нумерацию для заданного графа http://www.cyberforum.ru/cpp-beginners/thread757439.html
Задание: Построить М - и Т- нумерацию для заданного графа. Немогли бы вы хотя бы обьяснить что это за нумерации такие?
C++ Проблемы с чтением файла на c++ Задача: Сформировать массив данных с помощью структуры. Предметная область – данные о студентах имеющих публикации (номер по порядку, ФИО, адрес, количество статей). Отсортировать полученный список по полю «количество статей» (сортировка по убыванию). Вывод результатов оформить в виде таблицы. Использовать файлы для ввода-вывода данных. До вывода в файл ещё не добрался, проблемы на... http://www.cyberforum.ru/cpp-beginners/thread757430.html
Проблемы с неполной спецификацией типа C++
Доброго времени суток! Подскажите пожалуйста, почему не компилируется? Я же прописал объявление(неполную спецификацию типа) класса T2. Ошибка: main.cpp(10): error C2027: use of undefined type 'T2' #include <iostream> #include <string> class T2;
Разработать шаблон класса “множество” (реализация через список) C++
Разработать шаблон класса “множество” (реализация через список). Тип элементов множества за- дается как параметр шаблона. Написать тестовую программу.
C++ В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива с нечетными номерами. http://www.cyberforum.ru/cpp-beginners/thread757409.html
В одномерном массиве, состоящем из n вещественных элементов, вычислить: Сумму элементов массива с нечетными номерами.
C++ Разработайте класс FRACTION Задание 1: Разработка класса. Разработайте класс FRACTION. Элемент класса: - числитель; - знаменатель. Методы: - конструктор без параметров (по умолчанию); - конструктор с параметрами; - конструктор копирования; подробнее

Показать сообщение отдельно
rafiksaiti
1 / 1 / 0
Регистрация: 15.09.2012
Сообщений: 40
10.01.2013, 17:34  [ТС]     Поменять местами слово максимальной и минимальной длины.
Цитата Сообщение от David Sylva Посмотреть сообщение
Разбить строку на слова можно с помощью http://www.cplusplus.com/reference/cstring/strtok/
а как потом учесть если у меня было 10 пробелов между словами? да, я могу как вариант разбить строку на слова, занести их в массив, запомнить номера макс и минимального, потом создать новую, но я потеряю пробелы и знаки препинания. Есть еще вариант через for самому растягивать, потом сжимать строку, но это очень не хочется...

Добавлено через 2 минуты
Цитата Сообщение от Tiva Посмотреть сообщение
я вот не могу решить через char*
ну как могу
но как только, немного поменять условие к более реальным, что "размер входных данных не известен", программа перестанет работать.
string совсем не торт?
на самом деле можно и стринг, условие не стоит именно через char*.
Собственно вот, полное условие, если интересно:
В текстовом файле записаны строки длиной не более 255 символов, слова в которых разделены хотя бы одним пробелом или знаками препинания. В каждой строке поменять местами слова максимальной и минимальной длины. Если максимальных и/или минимальных слов.

Меня не интересует само считывание из файла и т.п. Просто фрагмент как поменять местам макс. и мин. слово в строке...

Добавлено через 2 часа 1 минуту
если кому интересно(особо не тестил, но работает):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include<iostream>
#include<limits.h>
#include<string>
using namespace std;
bool prov(string,int);
int dlina(string,int);
int main()
{
    setlocale(LC_ALL,".1251");
    FILE* f_in;
    FILE* f_out;
    if((f_in=fopen("input.txt","r"))==NULL)
    {
        cout<<"Ошибка открытия файла"<<endl;
        return 1;
    }
    if((f_out=fopen("output.txt","w"))==NULL)
    {
        cout<<"Ошибка создания файла"<<endl;
        return 1;
    }
    char *s=new char[100];
    fgets(s,99,f_in);
    if(feof(f_in))
    {
        cout<<"Файл пуст"<<endl;
        return 1;
    }
    string st; string st_min; string st_max;
    st=s;
    int konec_max; int nach_max;
    int konec_min; int nach_min;
    int max=0; int min=INT_MAX;
    while(!feof(f_in))
    {
        st=s;
        for(int i=0;i<st.length();i++)
        {
            if(prov(st,i))
            {
                int dlin=dlina(st,i);
                if(dlin>=max)
                {
                    max=dlin;
                    konec_max=i+dlin;
                    nach_max=i;
                    st_max=st.substr(nach_max,konec_max-nach_max);
                }
                if(dlin<=min)
                {
                    min=dlin;
                    konec_min=i+dlin;
                    nach_min=i;
                    st_min=st.substr(nach_min,konec_min-nach_min);
                }
            }
        
        }
        if(nach_max>nach_min)
        {
            st.erase(nach_min,konec_min-nach_min);
            st.insert(nach_min,st_max);
            st.erase(nach_max+konec_max-nach_max-konec_min+nach_min,konec_max-nach_max);
            st.insert(nach_max+konec_max-nach_max-konec_min+nach_min,st_min);
        }
        else
        {
            st.erase(nach_max,konec_max-nach_max);
            st.insert(nach_max,st_min);
            st.erase(nach_min-(konec_max-nach_max-konec_min+nach_min),konec_min-nach_min);
            st.insert(nach_min+konec_min-nach_min-konec_max+nach_max,st_max);
        }
 
        strcpy(s,st.c_str());
        fputs(s,f_out);
        max=0;
        min=INT_MAX;
        fgets(s,99,f_in);
    }
    return 0;
}
 
bool prov(string st,int i)
{
    if(i==0&&(st[i]!=' '||st[i]!='.'||st[i]!=','||st[i]!=':'))
        return true;
    if((st[i]!=' '&&st[i]!='.'&&st[i]!=','&&st[i]!=':'&&st[i]!='\n')&&(st[i-1]==' '||st[i-1]=='.'||st[i-1]==','||st[i-1]==':'))
        return true;
    else return false;
}
int dlina(string st,int i)
{
    int dlina=0; int i2=i;
    while((st[i2]!=' '&&st[i2]!='.'&&st[i2]!=','&&st[i2]!=':'&&st[i2]!='\n'&&st[i2]))
    {
        dlina++;
        i2++;
    }
    return dlina;
}
 
Текущее время: 23:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru