Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C] Обработка символьных строк


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


Автор: t_gran 19.12.2007, 04:33
Вот, посмотри. Побыстрому написал:

Код

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;
}

Автор: Steven 19.12.2007, 18:36
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); 
}



Подскажите пожалуйста в чем ошибка!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)