Скажем так можно решить Код | #include <iostream> #include <cstring> using namespace std;
class Word{ public: char **m_szText; // указатель на указатель на слово int m_nSize; // количество слов в массве int m_nMem; // количество реально выделенной памяти для указателей на слова
Word(): m_szText(NULL), m_nSize(0), m_nMem(0) {}; ~Word(){ // деструктор for( int i=0; i<m_nSize; i++ ) delete [] m_szText[i]; delete [] m_szText; } void Push_back( char * sourse ); // запись слова в массив void Sort(); // сортировка };
void Word::Push_back( char *sourse ){ if( m_nMem == m_nSize ){ // если памяти нехватает m_nMem += 10; // ... увеличиваем её char **ch = new char*[m_nMem]; memcpy( ch, m_szText, sizeof(char*) * m_nSize); delete m_szText; m_szText = ch; } // записываем новое слово m_szText[m_nSize] = new char[strlen(sourse) +1]; strcpy( m_szText[m_nSize], sourse ); m_nSize++; } void Word::Sort(){ // Сортировка вставками int i, j; for( i=0; i<m_nSize; i++ ){ char *ch = m_szText[i]; for( j=i-1; j>=0 && strcmp( ch, m_szText[j] ) <0; j-- ) m_szText[j+1] = m_szText[j]; m_szText[j+1] = ch; } }
////////////// MAIN //////////////////// int main(){ Word text; // массив слов char buf[1000]; cout << "Enter string\nend - exit input\n";
while(1){ cin >> buf; // читаем слово if( !strcmp( buf, "end" )) break; // если ввели "end" выходим из цикла text.Push_back( buf ); // запись числа в массиве слов }
text.Sort(); // сортировка слов cout << "\n\nText sort:\n\n\n"; // вывод слов на консоль for( int i=0; i<text.m_nSize; i++ ) cout << text.m_szText[i] << "\n";
std::cin.sync(); cin.get(); // пауза return 0; }
|
Добавлено @ 13:48 Dov, |