Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Обработка символьных строк, оставить слова, в к-х одинаковые буквы 
:(
    Опции темы
Steven
  Дата 12.12.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.12.2007

Репутация: нет
Всего: нет



Огромная просьба помочь в написании проги на языке Си или С++!Помогите пожалуйста!!! 
Задание:
Оставить только те слова в символьной строке, в которых есть одинаковые (повторяющиеся)буквы.



Это сообщение отредактировал(а) Steven - 13.12.2007, 11:38
PM MAIL   Вверх
t_gran
Дата 19.12.2007, 04:33 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: 33
Всего: 37



Вот, посмотри. Побыстрому написал:

Код

char *filtering (char *inStr)
{
   char *newStr= new char [strlen (inStr) + 1];    // Итоговая (результирующая) строка
   char *bufStr= new char [strlen (inStr) + 1];    // Буфер обмена (хранение текущего слова)
   *newStr= '\0';                                  // "Обнуляем" результирующую строку newStr
   int index= 0;                                   // Индекс текщей позиции в буфере
   while (true)
   {
      if (*inStr == ' ' || *inStr == ',' || *inStr == '.' || *inStr == '\0') // Понятно, что ищем разделители слов
      {
         bufStr[index]= '\0';                      // "Замыкаем" буфер обмена
         int lengthBufStr= strlen (bufStr);        // Определяем длинну буфера (в символах :-)
         bool blQuit= false;                       // Флаг в true будет знаминовать положительный выход из поиска
         int i, j;                                 // Две привычные переменные помогают реализовать цикл в привычном виде :-)
         for (i= 0; i < lengthBufStr; i++)         // Начинаем поиск (поиск осуществляеися в строке содержащейся в буфере обмена)
         {
            for (j= i + 1; j < lengthBufStr; j++)  // Поиснять, я думаю, не надо (это стандартный поиск)
            {
               if (bufStr[i] == bufStr[j])         // Как только находим одинаковые символы
               {
                  strcat (newStr, bufStr);         // Буфер обмена копируем в результирующую строку
                  strcat (newStr, " ");            // Это, как видно, просто разделитель
                  blQuit= true;                    // Указываем, что необходимое найдено и можно завершить поиск
                  break;                           // Выходим из текущего цикла
               }
            }
            if (blQuit)                            // В том случае если поиск дал положительный результат,то просто выходим из тикущего цикла
            {
               break;
            }
         }
         while (*inStr == ' ' || *inStr == ',' || *inStr == '.')  // Просто пропускаем разделители слов
         {
            *inStr++;
         }
         index= 0;                                 // Сбрасываем индекс текщей позиции в буфере
      }
      if (*inStr == '\0')                          // Ну, это для выхода
      {
         break;
      }
      bufStr[index++]= *inStr++;                   // Копируем текущей символ входной строки в буфер
   }
   delete bufStr;
   return newStr;
}


Это сообщение отредактировал(а) t_gran - 19.12.2007, 04:36


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
Steven
  Дата 19.12.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.12.2007

Репутация: нет
Всего: нет



t_gran, 
Спасибо за код!!! smile 

Проверьте пожалуйста вот этот код, по идее он дожен выполнять такую же задачу! подскажите что не то!!!

Код

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

#define LEN_STR 256
#define LEN_WORD 50
#define N 5

// объявляется список переменных

char seps[10] = " ,.:;'!?%";
char* text;
char* temp;

char* last;
char* word;
char* res;
int i = 0;
int c = 0;
int l = 0;
int maxi = 0;
int maxl = 0;

void main(void)
{
char count[256];

memset(count, 0, 256); // обнуление массива - заполнение массива нулевым символом
last = temp; 
word = strtok(temp, seps); // в данном месте ищем первую подстроку до первого разделительного символа из массива seps
while (word) // выполняем до достижения конца строки
{
strncat(res, text + (last - temp), word - last); // производим слияние

c = 0;
memset(count, 0, 256);
for (i = 0;i < strlen(word); i ++) // осуществляется поиск дубликатов-символов тут мне компилятор ошибку выдает
{
if (++ count[word[i]] == 2)
{
c = 1;
break;
}
}
if (c)
strcat(res, word);

last = word + strlen(word);
word = strtok(NULL, seps);
}
printf("%s\n", word); 
}



Подскажите пожалуйста в чем ошибка!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.