File main cpp Author smacker Created on Апрель 2009 18 19 include iost

 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
/*
* File: main.cpp
* Author: smacker
*
* Created on 9 Апрель 2009 г., 18:19
*/
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
void sort(char str[256], int start, int end)
{ // по сути сортировка пузырьком. Чуть изменённая
for (int i=end-1; i>start; i--) // От последнего символа слова до первого
{
if (isdigit(str[i])) // если символ - число
{
for (int j=start; j<i; j++) // от начала слова до i
{
if (isdigit(str[j]) && str[i]>str[j]) // если символ - число и текущий символ меньше символа с индексом i
{
int tmp = str[i]; // меняем их местами
str[i] = str[j];
str[j] = tmp;
}
}
}
}
}
void print_s(char str[256])
{
while (*str!=0)
{
cout << *str++; // выводим символы пока не наткнёмся на конец строки, заодно инкриментирую указатель
}
cout << endl;
}
void split(char str[256])
{
int j = 0;
int i = 0;
while (str[i]!=0) // пока указатель не равен 0. Нулю он равен в конце строки
{
if (str[i] == ' ') // если текуший символ пробел
{
sort(str, j, i); // вызываем сорт, передавая строку, индекс начала и конца слова
j = i; // начало слова = конец предыдущего
}
i += 1; // собственно увеличиваем счётчик
}
sort(str, j, i); // для последнего слова тоже вызываем сорт
}
int main(int argc, char** argv) {
char instring[256];
printf("Please enter string: ");
gets(instring);
split(instring);
print_s(instring);
return (EXIT_SUCCESS);
}