Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2009, 16:21   #1
Master23
 
Регистрация: 29.05.2009
Сообщений: 5
По умолчанию Программирование алгоритмв над массивами символов

Задание, которое надо сделать: Во введенном тексте найти группы слов, записанных одними и теми же буквами и отличающиеся только их порядком, т.е. перестановкой. (Например, КОМАР, КОРМА).


Есть программный код так скажем с похожим заданием: В заданном тексте найти наиболее часто встречающееся слово.

Код:
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
main()
{          
char *str=new char[200];
char *strw=new char[200];
char *w1=new char[200];
char *word=new char[15];
char *word2=new char[15];
char *word1,*w2;
int n=0,j,k,i;
cout<<"Vvedite tekst:"<<endl;
cin.get(str,199);
strcat(str," ");
strcpy(w1,str);
while(1)
{
i=0;
strcpy(strw,str);
while (*w1==' '||*w1==','||*w1=='.')
w1++;
w2=w1;
w2=strpbrk(w1,", .");   
if (w2==NULL) break;
j=strlen(w1)-strlen(w2);
word1=strtok(strw,", .");
while (word1)
{k=strnicmp(word1,w1,j);
if ((k==0)&&(j==strlen(word1))) {i++;
strcpy(word2,word1);}
word1=strtok(NULL,", .");
}
if (n<i){n=i;
strcpy(word,word2);}
strcpy(w1,w2);
}
cout<<"Slovo '"<<word<<"' povtoriaetsia "<<n<<" raza";
getch();
}

Не знаю что добавить или убрать, для того чтобы находились слова похожие буквами, но в разном порядке.
Master23 вне форума Ответить с цитированием
Старый 31.05.2009, 16:25   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Опишу идею:
Заносите весь текст в массив слов.
Берете первое слово. Сортируете его (посимвольно). При этом сортируете его копию (чтобы само слово не потерять).
Потом проходите по другим словам. Каждое слово также сортируете и сравниваете. Если совпадение, то выводим исходные слова.
Когда пробежали по всему массиву, берем второе слово. И то же самое.
Только нужно будет еще завести массив для слов, которые уже просмотрели.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 31.05.2009, 16:58   #3
Master23
 
Регистрация: 29.05.2009
Сообщений: 5
По умолчанию

Логически понятно, но вот задания связанные со словами вообще не воспринимаются моим мозгом
Master23 вне форума Ответить с цитированием
Старый 31.05.2009, 17:09   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Master23
Логически понятно, но вот задания связанные со словами вообще не воспринимаются моим мозгом
Я врядли смогу помочь вашему мозгу их лучше воспринимать.

Слова можете выделять с помощью strtok (вбейте название в поиск и найдете много примеров).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.06.2009, 17:13   #5
Master23
 
Регистрация: 29.05.2009
Сообщений: 5
По умолчанию

Вот чего насоветовали, но что-то пол кода понять не могу
Код:
#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
main()
{
char s1[10][10],s[100];
int i,j,k,r,n,l,ind,b[10];
//Ввод строки
cout<<"input";
cin>>s;
cout<<endl;

//Разбиваем на слова и записываем в массив s1
i=0; k=1;

while(i<strlen(s)){
j=-1;
while (s[i]!==''&&i<strlen(s))
{j++;s1[k][j]=s[i];
i++;}
k++,i++;
//Пропускаем пробелы до нового слова
while(s[i]==''&&(i<strlen(s))) i++;}
for(i=1;i<k;i++){
for(j=0; j<=strlen(s1[i]);j++)
cout<<s1[i][j]<<endl;
//Берем слово ищем в массиве и запоминаем его номер,
//чтобы не печатать повторно
n=0;l=1;
while (l<=k && n<k){
ind=0;
for(i=1; i<=n;i++) {
if(b[i]==l) ind=1;};
if(ind==0){
n++;b[n]=l;
cout<<s1[l];
for(i=l+1; i<=k;i++) {
if(strlen(s1[l])==strlen(s1[i])){
j=0;ind=1;
while(ind==1 && j<strlen(s1[l])){
r=0;
while (r<strlen(s1[i])&& s1[i][r]!=s1[l][j]){r++;};
j++;};
if(ind==1 && j<=strlen(s1[l])){
ind=0;
for(r=1;r<=n;r++) if(b[r]==i) ind=1;
if(ind==0) {n++;b[n]=i; cout<<s1[i]);};
}}}}
cout<<"\n'<<endl;
l++;
}
getch();
}
Master23 вне форума Ответить с цитированием
Старый 08.06.2009, 17:36   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Это даже не скомпилится из-за ошибок.
И в таком виде этот код лучше даже не пытаться понять.

Напишите код сами, в соответствии с тем, что я изложил во 2-м посте.

Цитата:
Сообщение от Master23
Вот чего насоветовали, но что-то пол кода понять не могу
А что вы предлагаете? Чтобы кто-то разобрался и объяснил вам? Или как?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование алгоритмов над многомерными динамическими массивами Master23 Общие вопросы C/C++ 2 30.05.2009 04:28
Простейщие операции над массивами ZloyGenii2008 Паскаль, Turbo Pascal, PascalABC.NET 0 27.12.2008 14:24
Надстройка над Си emperio Win Api 2 26.04.2008 12:58
Помогите решить задачу с динамическими массивами и строками символов Andres Помощь студентам 2 31.01.2008 11:09
Насмешка над антивирусами Veytarn Софт 0 03.02.2007 05:19