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

Вывести слова строки в порядке убывания числа букв в них - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Borland C++ http://www.cyberforum.ru/cpp-beginners/thread987824.html
Форумчане , помогите. Начали изучение С++ в универе. Сделал 2 лбораторки, препод проверил , сказал ошибок нет.НО программа не работает. После run выдает: #include <stdio.h> #include <conio.h>...
C++ Ссылка на экземпляр класса в DLL Написал маленький каркасик для собственново фреймворка, и проблема возникла когда хотель экспортировать его в DLL. Фреймворк предпологает запуск приложения следующим образом: int WINAPI... http://www.cyberforum.ru/cpp-beginners/thread987809.html
C++ Структуры и определение операторов для работы с ними
Есть отдельный файл с базовыми структурами, которые используются во всём проекте. Есть файл с классом, в котором используется собственная структура, забивающая часть изначальных данных в остальные...
C++ Вычислить сколько товара можно купить без сдачи
Задаётся произвольная цена товара (допустим 11,11) задается произвольное количество монет (10р 5р 2р 1р 50к 10к 5к) допустим каждой по 5 сколько можно купить пива на это количество монет (при данных...
C++ cstdio vs fstream http://www.cyberforum.ru/cpp-beginners/thread987791.html
Есть программа, виводящяя 16-ричный дамп бинарного файла (вместо каждого байта входного файла виводится значение в 16-ричной системе) Для работы с файлами использованы функции cstdio. а нужно...
C++ Парсер XML файлов Доброго времени. Нужен парсер для такой цели : 1) Хранить/сохранять объекты программы, и загружать обратно. Собственно, есть ли нужные библиотеки, или нужно писать парсер самому ? Если самому,... подробнее

Показать сообщение отдельно
Vivo
23 / 23 / 2
Регистрация: 27.09.2009
Сообщений: 101
28.10.2013, 15:25
Цитата Сообщение от McSimov Посмотреть сообщение
если интересно, то я раскопал, что это можно делать и с помощью scanf в таком виде:
scanf("%359s\n", st);
Я про это знал, просто у меня в VS 2010 это не срабатывает, поэтому и не посоветовал.

Если у вам нужно выполнить это задание на c++,то можно вот так:
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
#include "stdafx.h"
#include <stdlib.h> 
#include <iostream>
#include <algorithm> 
#include <vector>
#include <sstream>
 
using namespace std;
 
bool CompareFunction (string i,string j) 
{ 
    return (i.length()<j.length()); 
}
int main()
{
    char  text[255];
    cin.getline(text,255);
 
    stringstream ss(text);
 
    string s;
    size_t count = 0;
    vector<string> words;
 
    for (; ss >> s; count++)
        words.push_back(s);
 
    sort (words.begin(), words.end(), CompareFunction);
    
    for (int i=0;i<words.size();i++) 
        cout<<words[i]<<"\n";
 
    system("pause");
    return 0;
}
Добавлено через 21 минуту
Ну а по поводу вашего кода:
Посмотрев в отладчике ваш новый код, я не понял как вы не нашли проблемы с вашим алгоритмом, попробуйте поставить много точек останова и посмотреть значения массивов. Приведу часть проблем:
Пример:
Берем строку: 333 1 22. k у нас будет равна 3-м и мы выделяем память под 3-и элемента. Далее вы ищите координаты пробелов и записываете в массив, НО вы не учли тот факт, что пробелов в данной строке 2, а k равна 3-м т.к. вы инициализировали его единицей. В результате этого упущения у вас в массиве wrds адекватные значения только у нулевого и первого элементов. После этого вы создаете массив структур и заполняете первый и последний элементы значениями, НО из-за некорректности последнего элемента в массиве wrds получается, что в этом месте будут не те значения(строки 89-92):
C++
1
2
3
arw[k-1].b=wrds[k-1];
arw[k-1].e=strlen(st);
arw[k-1].l=strlen(st)-wrds[k-1];
Получается в значениях b и l некорректные значения, что в дальнейшем приведет к выходу за диапазон.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru