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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2012, 15:54   #1
elizar
 
Регистрация: 01.11.2011
Сообщений: 7
По умолчанию С++ В тексте найти пару слов, из которых одно является обращением другого

В заданном тексте найти пару слов, из которых одно является обращением другого.
вот например текст " привет как тевирп алед " должно вывести :
привет тевирп
дела алед
помогите мне ее доделать пожалуйста, желательно без использования string.h
Код:
#include <iostream> 
#include <string.h>
 
int main() 
{ 
    char str[] = "Real Madrid tevirP Champions of Spain"; 
    char asd[] = "Privet"; 
    char* ptr;  
    int size = strlen(asd); 
    int count = 0, i, j;
 
    ptr = strtok(str, " ,."); 
    while(ptr!=NULL) 
    { 
        for ( i = 0, j = size - 1; i < size; i++, j--) 
            if(ptr[i] == asd[j])  
                count++;
             
        if(count == size)  
        {
            std::cout << ptr << std::endl; 
            for ( i = strlen(ptr) - 1; i >= 0; i--) 
                std::cout << ptr[i]; 
        }   
        count = 0;
          ptr = strtok(NULL, " ,."); 
     }  
    std::cout << std::endl;
}
elizar вне форума Ответить с цитированием
Старый 29.10.2012, 16:25   #2
elizar
 
Регистрация: 01.11.2011
Сообщений: 7
По умолчанию

помогите плз
elizar вне форума Ответить с цитированием
Старый 29.10.2012, 16:49   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
вот например текст " привет как тевирп алед " должно вывести :
привет тевирп
дела алед
Слова "дела" в исходной строке нет, что немного смущает.

Рассмотрите такой алгоритм:
Код:
1) Запомнить начало слова.
2) Пока не нашли конца слова, идти по строке.
3) Вызвать подфункцию (см. ниже), которая принимает указатель на конец слова, его длину и проверяет, есть ли в строке дальше это же слово задом наперёд.
4) Если есть, вывести слово и его же задом наперёд.
5) Идти по строке до начала нового слова или конца строки. Если началось новое слово, см. пункт 1.

Подфункция:
1) От указателя на конец слова идти вперёд до начала нового слова.
2) Идти по строке и одновременно от конца проверяемого слова в обратном направлении, проверяя, одинаковы ли буквы.
  3) Если совпали (длина слова) букв и следующий символ в строке не буква - ура, мы нашли зеркальную пару.
    Следует быть внимательными в том, чтобы не пройти назад больше, чем на переданную длину слова; в том, чтобы начинать проверять на соответствие только с начала слова.
4) Если на прямом ходе дошли до конца слова - идти до конца строки или начала нового слова; далее пункт 2)
Abstraction вне форума Ответить с цитированием
Старый 29.10.2012, 17:24   #4
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Простое и кривое решение, но рабочее. По вашим требованиям думать если честно лень.
Код:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int main()
{
	char str[] = "Privet Real Madrid tevirP Champions laeR of Spain";
	char* ptr;
    int size = strlen(str); 
    int count = 0,j;
	char* bkstr = (char*)calloc(size,sizeof(char));
	char* ptr2;
	strcpy(bkstr,str);
	ptr = strtok(str, " ,.");
	while(ptr)
	{
	   j = 0;
	   char* tmp = (char*)calloc(size,sizeof(char));
	   for(int i = strlen(ptr)-1; i >= 0; i--)
		  tmp[j++] = ptr[i];
	   tmp[j++] = '\0';
	   ptr2 = strstr(bkstr,tmp);
	   if(ptr2)
	   {
		  printf("%s %s\n",tmp,ptr);
		  ptr2[1] = 'x';
		  ptr2 = strstr(bkstr,ptr);
		  ptr2[0] = 'x';
	   }
	   ptr = strtok(NULL, " ,.");
	   free(tmp);
	 }
    free(bkstr);
    return 0;
}
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Процедуры. Заменить в тексте одно слово на другое JosH7 Помощь студентам 3 23.09.2012 22:06
Дан файл f. Найти самое длинное слово среди слов, вторая буква которых есть 'e'. Работа с файлами. Делфи 7. Fatalita Помощь студентам 0 30.05.2012 04:24
Ввести с клавиатуры строку. Посчитать количество слов в строке. Определить, что является разделителем слов. Вывести рез-ть на экра Газимов Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 02.03.2012 15:58
Составить в алфавитном порядке список всех слов, встречающихся в тексте, и количество этих слов. KAPAHDAW Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2009 01:19
Одно без другого Принц Свободное общение 2 30.05.2008 22:50