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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2008, 15:46   #1
aurora_87
Пользователь
 
Регистрация: 25.12.2008
Сообщений: 16
По умолчанию проверить, содержится ли строка в массиве

Сформировать двумерный массив целых чисел. Проверить, содержится ли в нем заданная строка чисел.
Строка может быть меньше, чем количество элементов в строке массива(a[i][j]-массив, b[l]-строка). Мне кажется, необходимо 3 вложенных цикла

for(i=0;i<m;i++)
for(j=1;j<n;j++)
{
flag=0;
for(l=0;l<k;l++)
if (mas[i][j+l]!=b[д])
flag=1
.
.
.
}
не могу правильно задать условия проверки, не получается правильно проходить по строкам. Помогите написать прогу!PLEASE
aurora_87 вне форума Ответить с цитированием
Старый 25.12.2008, 16:06   #2
eyo
Помощник
Пользователь
 
Регистрация: 24.12.2008
Сообщений: 55
По умолчанию

Сделай два обычных вложенных цикла и воспользуйся strstr(). Вот пример её использования http://www.realcoding.net/article/view/6543
Продал кроссовки Fila, купил текилу.
eyo вне форума Ответить с цитированием
Старый 26.12.2008, 14:25   #3
aurora_87
Пользователь
 
Регистрация: 25.12.2008
Сообщений: 16
По умолчанию

в том-то и дело, что нужно написать в статическом виде и вводимая строка - одномерный массив, без третьего цикла не обойтись
aurora_87 вне форума Ответить с цитированием
Старый 26.12.2008, 15:33   #4
eyo
Помощник
Пользователь
 
Регистрация: 24.12.2008
Сообщений: 55
По умолчанию

Можешь писать и в статическом, вместо:
Код:
char *string1="needle in a haystack";
char *string2="hay";

printf("%sn", strstr(string1,string2));
пиши:
Код:
	char string1[]="needle in a haystack";
	char string2[]="hay";
	printf("%s", strstr(string1,string2));
Хм. Может даже одни циклом обойдешься.
Счас подумаю.
Продал кроссовки Fila, купил текилу.
eyo вне форума Ответить с цитированием
Старый 27.12.2008, 00:52   #5
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
По умолчанию

Я бы сделал так:
1) Создал динамический двумерный массив
2) Создал динамический массив искомых чисел
3.а) идя по одномерному массиву, искать данное число в двумерном
3.б) идя по двумерному - искать в одномерном

Ну и естественно вести флаг... Если хоть одна в 3.а не выполнится, то break, if(!flag) //не содержится
А с вариантом 3.б придется похуже: либо удалять найденный из одномерного элемента, либо завести массив bool'ов = размеру одномерного и в нем отслеживать
Кароч на вкус и цвет!

P.S. могу сделать за 100 р. с комментариями

Последний раз редактировалось StarWorm; 27.12.2008 в 00:54.
StarWorm вне форума Ответить с цитированием
Старый 27.12.2008, 20:27   #6
aurora_87
Пользователь
 
Регистрация: 25.12.2008
Сообщений: 16
По умолчанию

я написала так и прога работает, но мне препод сказал переписать её без break, потому что к проге нужна блок-схема, а в ней с помощью базовых алгоритмических структур невозможно описать выход из цикла с помощью break и нельзя использовать динам.память:

Код:
//MATRIX.C - proveryaet, sodergitsya li stroka v massive.

#include<stdio.h>
#include<conio.h>
#define M 10
#define N 10
#define P 10

void main()

{

int mas[M][N],b[P];

int i,j,flag,m,n,l,k;

     clrscr();

     printf("\n Vvedite chislo strok massiva:");
scanf("%d",&m);

printf("\n Vvedite chislo stolbcov massiva:");
scanf("%d",&n);

printf("\n Vvedite chislo elementov stroki:");
scanf("%d",&k);

clrscr();

printf("\n Vvedite dvyhmernyj massiv:\n\n");


//Vvod massiva:
      for(i=0;i<m;i++)

  {
           printf("\n");
           for(j=0;j<n;j++)
                 scanf("%d",&mas[i][j]);
       }

printf("\n");
     //Vvod stroki
      printf("\n\n Input the string:\n");
      for(l=0;l<k;l++)
            scanf(" %d",&b[l]);

//proverka na nalichie vvedennoj stroki v massive:

     for(i=0;i<m;i++)
      {
         for(j=0;j<n;j++)
           {
               flag=0;                //predpologim,chto stroka sodergitsa v massive
               for(l=0;l<k;l++)
                   if (mas[i][j+l]!=b[l];
                       flag=1;
                if (flag==0)
                    break;
            }
         if(flag==0)
             break;
      }

if (flag==0)
          printf(" \n Stroka sodergitsya v %d stroke massiva\n",i+1);
     else
          printf(" Stroka ne sodergitsya v  massive\n");
     getch();

}
Модератор: для оформления кода есть тег CODE

Последний раз редактировалось MaTBeu; 27.12.2008 в 22:29.
aurora_87 вне форума Ответить с цитированием
Старый 28.12.2008, 01:25   #7
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
По умолчанию

У тебя немного неправильно...
Я же тебе сказал, что внешний - должен быть цикл по b[i], тогда идешь с флагом и смотришь...
Код:
     flag=0;     //т.е. предполагаем, что нет данного элемента
     for(l=0;l<k;l++)
      {
         for(i=0;i<m;i++)
           {
               for(j=0;j<n;j++)
                   if (mas[i][j]==b[l]);
                       flag=1;
            }
           if(flag==0)
               l=k;
      }
     if(flag==0)
          //не содержится
     else
          //содержится
P.S. я бы сделал так
StarWorm вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверить, является ли заданная строка симметричной. - Ассемблер VHomer Помощь студентам 3 27.12.2008 19:37
Цикл в массиве Шура Помощь студентам 2 27.11.2008 10:39
Строка состаяния или загрузачная строка Sergeu Мультимедиа в Delphi 8 27.08.2008 10:32
Снова о массиве Constellation Общие вопросы Delphi 2 09.02.2008 20:42
Проверить пуста ли строка? Slim Microsoft Office Excel 2 09.04.2007 15:55