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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2013, 21:47   #1
Леопольдовна
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 17
Восклицание найти в имеющемся тексте все слова, в которых использованы только буквы, имеющиеся в заданном слове

Для заданного достаточно длинного слова найти в имеющемся
тексте все слова, в которых использованы только буквы,
имеющиеся в заданном слове (с учетом кратности вхождения).
Код:
int printMenu();
char* sortWord(char* x);
void printDict();
int compare(char* str1,char* str2);
void scanfDict(char* str);

int _tmain(int argc, _TCHAR* argv[])
{
int menu = 0;
char string[64];

do
{
menu = printMenu();
switch(menu)
{
case 1:
printf("\n\tEnter your word...");
scanf("%s", string);
printf("\n");
break;
case 2:
printf("\n\tYour dictionary is...\n\n");
printDict();
printf("\n");
break;
case 3:
scanfDict(string);
printf("\n");
break;
case 0:
break;

default:
printf("\a\n\tERROR!!! Choose any case\n\n");
}

}while(menu != 0);

return 0;
}

int printMenu()
{
int m = 0;

printf("\n-------MENU-------\n");
printf("\n1. Enter your word\n");
printf("2. Print the dictionary\n");
printf("3. Scanf the dictionary and the result\n");
printf("-------------------------\n");
printf("0. Exit\n\n");

scanf("%d", &m);

return m;
}

char* sortWord(char *x)
{
char* y = x;
int last = strlen(y), i = 0, j = 0, temp = 0;

for (i = last - 1; i > 0; i--)
{
for (j = 0; j < i; j++)
{
if (y[j+1] < y[j])
{
temp = y[j];
y[j] = y[j+1];
y[j+1] = temp;
}
}
}

return y;
}

void printDict()
{
FILE* file;
char *fname = "D:\\2.txt"; 
char temp[128];

file = fopen(fname, "r");

if(file == 0)
{
printf("\a\n\tERROR!!! Yuor file is not found!\n\n");
}

while(fgets(temp, 10, file) != NULL)
{
printf("\t%s\n", temp);
}
}

int compare(char* str1,char* str2)
{
int i = 0, j = 0;

for(i = 0; i < strlen(str1); i++)
{
if(str1[i] = str2[j])
{
j++;
continue;
}
else
{
return 1;
}
}

return 0;
}

void scanfDict(char *str)
{
FILE* file;
char *fname = "D:\\2.txt"; 
char temp[64];
char* buff;
file = fopen(fname, "r");

if(file == 0)
{
printf("\a\n\tERROR!!! Yuor file is not found!\n\n");
}

while(fgets(temp, 10, file) != NULL)
{
buff = temp;
if(compare(sortWord(str), sortWord(buff)))
{
printf("%s\n", str);
}
}

fclose(file);
}
Леопольдовна вне форума Ответить с цитированием
Старый 03.04.2013, 21:52   #2
Леопольдовна
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 17
По умолчанию

почему не работает мой код? что тут не так?
смысл был вот в чём: я принимаю строку и сортирую её, затем вывожу построчно слова из файла, затем сортирую каждое слово и сравниваю с введённым(также sort)
Леопольдовна вне форума Ответить с цитированием
Старый 03.04.2013, 21:58   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
я принимаю строку и сортирую её
Зачем строку сортировать? Сразу разбивай на слова, и уже их сверяй с маской.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.04.2013, 22:00   #4
Леопольдовна
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 17
По умолчанию

просто мне не только совпадения слов определить нужно, но совпадения типа hello - elloh

Последний раз редактировалось Леопольдовна; 03.04.2013 в 22:07.
Леопольдовна вне форума Ответить с цитированием
Старый 03.04.2013, 22:13   #5
Леопольдовна
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 17
По умолчанию

вначале я слово введённое сортирую..я это имел в виду
Леопольдовна вне форума Ответить с цитированием
Старый 03.04.2013, 22:23   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мы друг друга непонимайт...
Вот что бы я предложил:
Код:
// qwe.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <string>

int _tmain(int argc, _TCHAR* argv[])
{
	char s[]="hello damned world";
	char q[]="ehlol";
	char s2[255]; memset(s2,0,255);
	int n=strlen(q);
	for(char *c=strtok(s," ");c;c=strtok(0," ")){
		int k=0;
		if(strlen(c)==n){
			for(int w=0;c[w];w++) 
				for(int e=0;q[e];e++)
					if(q[e]==c[w]){k++; break;}
		}
		if(k==n) printf("%s\n",c);
	}
	getchar();
	return 0;
}
Подходит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.04.2013, 22:33   #7
Леопольдовна
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 17
По умолчанию

спасибо, сейчас попытаюсь разобраться...
и ещё вопрос тогда: если я читаю из файла строки, то этот код подойдёт?
Леопольдовна вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Надо составить программу, которая в заданном слове удваивает все буквы PicniX Помощь студентам 2 27.12.2012 16:31
Найти слова, которые встречаются в тексте только 1 раз akademochka Помощь студентам 1 05.10.2012 12:40
Найдите все слова в предложении, которые содержат только заданные буквы. Для определения буквенного состава используйте процедуру. avizer Помощь студентам 3 27.03.2012 21:07
Дан текст.Найти все палиндромы(слова-перевёртыши)в етом тексте НЕМО170792 Помощь студентам 6 18.06.2011 23:21
Переписать в новый файл все слова, которые содержат только буквы латин.алф. volchica Паскаль, Turbo Pascal, PascalABC.NET 3 18.02.2011 16:22