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

Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами - C++

Восстановить пароль Регистрация
 
cx5xclxxl9
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 23
13.05.2011, 14:54     Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами #1
Здравствуйте, уже несколько дней мучаюсь над такой задачей :

"Имеется литерная последовательность, состоящая из не более чем 30
слов, в каждом из которых не более 5 литер. Слова разделены пробелами.
Преобразовать эту литерную последовательность в другую литерную
последовательность всеми описанными ниже способами(сделать функции для
каждого из нижеследующих преобразований в отдельности).

* все различные слова, указав для каждого из них число его вхождений
в последовательность
* переставить слова в полном обратном лексикографическом порядке
(т.е. так, чтобы они были упорядочены "против" алфавита по всем
образующим их литерам)."

Сам, в итоге, смог сделать правильно только разбиение литерной последовательности на слова

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
#include "stdafx.h"
#include "stdio.h"
#include <string.h>
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
char c[1000];
char c2[30][5];
puts ("vvedite tekst");
gets (c);
int p=0,pred=0;
for (int j=0,i=0;j<30;j++)
{
 p=strchr(c+p,' ')-c;
 if (p<0) 
 p=strlen(c);
 for (i=pred;i<p;i++)
 c2[j][i-pred]=c[i];
 c2[j][p-pred]=NULL;
 p++;
 pred=p;
 
}
 
 
return 0;
}
Добавлено через 17 часов 26 минут
Помогите доделать сортировку
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2011, 14:54     Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами
Посмотрите здесь:

C++ Преобразовать последовательность
Преобразовать string в последовательность чисел C++
C++ Преобразовать последовательность из n вещественных чисел a1, ..., an.
Построить последовательность n!, для n=1…7 со всеми возможными перестановками из элементов этой последовательности C++
C++ Преобразовать последовательность
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.05.2011, 15:28     Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами #2
Цитата Сообщение от cx5xclxxl9 Посмотреть сообщение
* все различные слова, указав для каждого из них число его вхождений
в последовательность
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
#include <iostream>
#include <string>
#include <algorithm>
#include <sstream>
#include <vector>
#include <iterator>
#include <map>
 
int main(){
  std::string str;
  std::cout << "\n\nString = ";
  getline(std::cin, str);
  std::istringstream ist(str);
  std::istream_iterator<std::string> start(ist), finish;
  std::vector<std::string> v(start, finish);
  std::vector<std::string>::iterator it = v.begin();
  std::map<std::string, size_t> m;
  std::map<std::string, size_t>::iterator _it;
  while(it != v.end()){
    m.insert(std::make_pair(*it, std::count(v.begin(), v.end(), *it)));
    ++it;
  }
  for(_it = m.begin(); _it != m.end(); ++_it)
    std::cout << _it->first << " - " << _it->second << '\n';
  return 0;
}
cx5xclxxl9
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 23
13.05.2011, 16:49  [ТС]     Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами #3
Цитата Сообщение от asics Посмотреть сообщение
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
#include <iostream>
#include <string>
#include <algorithm>
#include <sstream>
#include <vector>
#include <iterator>
#include <map>
 
int main(){
  std::string str;
  std::cout << "\n\nString = ";
  getline(std::cin, str);
  std::istringstream ist(str);
  std::istream_iterator<std::string> start(ist), finish;
  std::vector<std::string> v(start, finish);
  std::vector<std::string>::iterator it = v.begin();
  std::map<std::string, size_t> m;
  std::map<std::string, size_t>::iterator _it;
  while(it != v.end()){
    m.insert(std::make_pair(*it, std::count(v.begin(), v.end(), *it)));
    ++it;
  }
  for(_it = m.begin(); _it != m.end(); ++_it)
    std::cout << _it->first << " - " << _it->second << '\n';
  return 0;
}
Спасибо, правда я не понял, что там происходит, но всё работает.
cx5xclxxl9
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 23
17.05.2011, 15:54  [ТС]     Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами #4
Всё ещё актуально
cx5xclxxl9
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 23
24.05.2011, 12:22  [ТС]     Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами #5
А можешь немного прокомментировать код, чтобы я разобрался, буду очень благодарен.
cx5xclxxl9
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 23
27.05.2011, 15:46  [ТС]     Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами #6
Вот что получилось, вроде работает, может кому пригодится.

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
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include "stdafx.h"
#include "stdio.h"
#include <string.h>
#include <iostream>
using namespace std;
#include <string>
#include <algorithm>
#include <sstream>
#include <vector>
#include <iterator>
#include <map>
int g,a=1;
int p=0,pred=0,i;
 
 
 
void main()
{
 
 
 
 
/* Разбиение на слова */
char c[1000];
char c2[30][6];
 
 
puts ("Vvedite tekst ");
 
gets (c);
string str(c);
 
for (int z=0;z<1000;z++)
{if (c[z]==' ')
a=a+1;}
 
for (g=0,i=0;g<30;g++)
 {
 p=strchr(c+p,' ')-c;
 if (p<0) 
 p=strlen(c);
 for (i=pred;i<p;i++)
   
       c2[g][i-pred]=c[i];
       c2[g][p-pred]=NULL;
   
 
 p++;
 pred=p;
   
 }
 
 
/* Сортировка */
long q,j;
int result;
char x[1000];
 
for (q=0; q<a; q++){
    for (j=a-1; j>q; j--)
    {result = strcmp( c2[j-1], c2[j] );
    if( result < 0 ){
         strcpy(x, c2[j-1]);
         strcpy(c2[j-1], c2[j]);
         strcpy(c2[j], x);
      
      
            
        }
    }
}
 
for (q=0;q<a;q++)
    cout<<c2[q]<<" ";
 
 
 
/* Вывод количества входождений*/ 
 
istringstream ist(str);
istream_iterator< string> start(ist), finish;
vector< string> v(start, finish);
vector< string>::iterator it = v.begin();
map< string, size_t> m;
map< string, size_t>::iterator _it;
 
while(it != v.end())
 {
    m.insert( make_pair(*it,  count(v.begin(), v.end(), *it)));
    ++it;
 }
 
for(_it = m.begin(); _it != m.end(); ++_it)
     cout <<"\n"<< _it->first << " - " << _it->second;
  
system("PAUSE");
 
  
}
Yandex
Объявления
27.05.2011, 15:46     Преобразовать литерную последовательность в другую литерную последовательность всеми описанными ниже способами
Ответ Создать тему
Опции темы

Текущее время: 03:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru