Консультация № 180749
14.11.2010, 22:34
0.00 руб.
0 1 1
Здравствуйте эксперты! Помогите написать программу на Си с использованием функций ‘str’: Дана строка, содержащая слова, разделенные 1-м или несколькими разделительными символами (пробелами, табуляторами), в начале строки и в конце строки могут находиться разделительные символы. Сформировать новую строку, в которой слова исходной строки записаны в порядке возрастания длин и разделены одним пробелом. В начале и конце строки не должно быть разделительных символов.

Обсуждение

Неизвестный
15.11.2010, 06:58
общий
это ответ
Здравствуйте, Magma!

Проект сделан как консольное приложение, в среде MS Visual Studio 6.0 с использованием библиотеки шаблоно STL.
Сначала через cin получаем строку (надо нажать enter дважды, потому что первый будет считан в строку функцией getline)

Потом используется функция strtok для разбора введённой строки. Куски строки складываются в вектор vStrings

Потом идёт сортировка пузырьком (см. тут)

Потом в цикле собираем результрущую строку strOut и вывыодим её в cout.

Приложение:
#include "stdafx.h"
#pragma warning(disable:4786)
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std ;

int main(int argc, char* argv[])
{
// GET DATA
string s1;
cout << "Enter a string:";
getline(cin, s1);

// PARSE
vector<string> vStrings;
char *psz = strtok((char*)s1.c_str(), "\t ");
while(psz)
{
vStrings.push_back(psz);
psz = strtok(NULL, "\t ");
}

// SORT
vector<string>::iterator it;
if(vStrings.size() > 1)
{
bool bFound = true;
while(bFound)
{
bFound = false;
it = vStrings.begin()+1;
for(; it<vStrings.end(); it++)
{
if((*(it-1)).length() > (*it).length())
{
swap(*(it-1), *it);
bFound = true;
}
}
}
}

// OUTPUT
string strOut;
it = vStrings.begin();
for(; it<vStrings.end(); it++)
{
strOut += *it + " ";
}
cout <<strOut;

return 0;
}
4
Форма ответа