Я бы предложил вот такой вариант. Только чтобы ввести строку,нужно два раза нажать Enter.(а можно сначала считать в буфер через cin.getline(), а потом преобразовать в string). Если что не понятно, спрашивай
| Код | #include <iostream> #include <string> using namespace std; struct str_info { int begin; int end; int len; }; int main(int argc,char **argv) { string str; int k,n; getline(cin,str); int len = str.length(); str_info *str_inf = new str_info[len];
int pos,lastpos; int i; lastpos = 0; pos = str.find(" "); k =0; while (pos != -1) { str_inf[k].begin = lastpos; str_inf[k].end = pos-1; str_inf[k].len = pos - lastpos; k++; lastpos = pos; lastpos++; pos = str.find(" ",lastpos); } str_inf[k].begin = lastpos; str_inf[k].end = len-1; str_inf[k].len = str.substr(lastpos,size_t(-1)).length(); k++; cout << "***BEFORE SORT***\n"; for (i = 0; i < k; i++) cout << str.substr(str_inf[i].begin,str_inf[i].len) << endl; int j; str_info temp; for (i = 1; i < k;i++) for (j = 0; j <k-1;j++) { if (str_inf[j].len < str_inf[j+1].len) { temp = str_inf[j]; str_inf[j] = str_inf[j+1]; str_inf[j+1] = temp; } } cout << "\n***AFTER SORT***\n"; for (i = 0; i < k; i++) { cout << str.substr(str_inf[i].begin,str_inf[i].len) << endl; }
return 0; }
|
|