Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
#1

Поиск символа в массиве - C++

06.02.2013, 18:41. Просмотров 2250. Ответов 32
Метки нет (Все метки)

Задача:

Дано два линейных символьных массива. Найти наименьший символ среди символов первого массива, который не входит во второй массив.

Помогите, пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2013, 18:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск символа в массиве (C++):

Поиск символа не могу переделать под поиск сочетания символов - C++
Есть код программы на поиск и замену по одному символу.Не могу понять, как сделать код на поиск сочетания символов. Чтобы найдя в введённой...

Изменение некоторого символа в массиве - C++
Всем пт! Помогите плз разобраться: char str = "hello"; str = "s"; Читаю книгу Шилдта, там дело сводится к вышенаписанному...

Поиск символа A в слове В - C++
пытаюсь написать программу для нахождения количества символов В в слове А. написал вот этот код, но он постоянно зависает. подскажите в...

Поиск символа в строке - C++
Здравствуйте! у меня такой вопрос, надо найти символ в строке, а именно символ '<' и '>' между этими символами может быть что угодно... ...

Поиск символа - непойму - C++
я юзаю strchr но непойму что за второй параметр..он ИНТ! мне нужно найти кол-во символов в тексте например а. а если для string...

Поиск символа на консоли - C++
Всем привет. Допустим я поставил где-то на консоли символ при помощи функции SetConsoleCursorPosition(), потом в какой-то момент мне...

32
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
14.04.2013, 20:21 #16
edw1n, нет, вот так

C++
1
2
3
4
5
6
for (i=0; i<n; i++)
if ((mas1[i]!=mas2[i]))
     if(mas1[i] < mas2[i])
          min = mas1[i];
     else
          min = mas2[i];
0
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 20:25  [ТС] #17
Цитата Сообщение от yoghurt92 Посмотреть сообщение
edw1n, нет, вот так

C++
1
2
3
4
5
6
for (i=0; i<n; i++)
if ((mas1[i]!=mas2[i]))
     if(mas1[i] < mas2[i])
          min = mas1[i];
     else
          min = mas2[i];
Мне нужно вывести на экран наименьший символ первого массива, но его не должно быть во втором массиве.
Попробовал на таких комбинациях:
первый массив - abcde
второй массив - abkde
На экран вывело символ d.
Массивы у меня не динамические. mas1[5], mas2[5].
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
14.04.2013, 20:31 #18
edw1n, потому что элементы сравниваются попарно, нужно каждый элемент первого сравнивать со вторым.
0
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 20:33  [ТС] #19
Цитата Сообщение от yoghurt92 Посмотреть сообщение
edw1n, потому что элементы сравниваются попарно, нужно каждый элемент первого сравнивать со вторым.
Я понимаю, но выводить не должно d в данном случае, хотя бы потому что символ d есть в обеих массивах.
В общем весь код, что тут не так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <iostream>
 
int main (void)
{   int i, j; char temp;
    char mas1[5];
    char mas2[5];
    printf ("Enter first massive\n");
    for(i=0; i<5; i++)
        scanf ("%c", &mas1[i]);
    printf ("Enter second massive\n");
    for(i=0; i<5; i++)
        scanf ("%c", &mas2[i]);
    for (i=0; i<5; i++)
       { if (mas1[i]!=mas2[i])
           if(mas1[i]<mas2[i])
                      temp=mas1[i];
                      else
                      temp=mas2[i];
}
    printf ("%c\n", temp);
system ("pause");
return 0;
}
Спасибо.
0
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
14.04.2013, 20:39 #20
Что-то у всех такое сложное. Я бы так решил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
typedef unsigned char uchar;
 
bool hasElement(const uchar *arr, const int ARR_SIZE, const uchar element)
{
   for (int i = 0; i < ARR_SIZE; ++i)
   {
      if (arr[i] == element)
         return true;
   }
 
   return false;
}
 
int main()
{
   const int ARR1_SIZE = 10;
   const int ARR2_SIZE = 5;
   uchar arr1[ARR1_SIZE];
   uchar arr2[ARR2_SIZE];
   uchar min = ~0;
   // тут вставить инициализацию arr1, arr2
 
   for (int i = 0; i < ARR1_SIZE; ++i)
   {
      if (arr1[i] < min && !hasElement(arr2, ARR2_SIZE, arr1[i]))
         min = arr1[i];
   }
 
   std::cout << min << std::endl;
 
}
0
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 20:40  [ТС] #21
Цитата Сообщение от Buckstabue Посмотреть сообщение
Что-то у всех такое сложное. Я бы так решил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
typedef unsigned char uchar;
 
bool hasElement(const uchar *arr, const int ARR_SIZE, const uchar element)
{
   for (int i = 0; i < ARR_SIZE; ++i)
   {
      if (arr[i] == element)
         return true;
   }
 
   return false;
}
 
int main()
{
   const int ARR1_SIZE = 10;
   const int ARR2_SIZE = 5;
   uchar arr1[ARR1_SIZE];
   uchar arr2[ARR2_SIZE];
   uchar min = ~0;
   // тут вставить инициализацию arr1, arr2
 
   for (int i = 0; i < ARR1_SIZE; ++i)
   {
      if (arr1[i] < min && !hasElement(arr2, ARR2_SIZE, arr1[i]))
         min = arr1[i];
   }
 
   std::cout << min << std::endl;
 
}
Хахах, боюсь у меня препод такой код не поймет. Куда там мне.
Да. Он у нас такой.
0
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
14.04.2013, 20:50 #22
edw1n, ничего сложного там нет. Функция hasELement выполняет линейный поиск элемента в массиве и возвращает true в случае, если он найден.
В основном цикле обходим массив номер один и смотрим, меньше ли следующий элемент минимального, если да, то проверяем при помощи функции, содержится ли он во втором массиве, если нет, то получили новый минимальный элемент. Куда уже проще?
Вот чуть более продвинутая версия Здесь можно задавать массивы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
typedef unsigned char uchar;
 
bool hasElement(const uchar *arr, const int ARR_SIZE, const uchar element)
{
   for (int i = 0; i < ARR_SIZE; ++i)
   {
      if (arr[i] == element)
         return true;
   }
 
   return false;
}
 
int main()
{
   uchar arr1[] = "abcd";
   uchar arr2[] = "acd";
   const int ARR1_SIZE = sizeof (arr1) / sizeof (*arr1) - 1;
   const int ARR2_SIZE = sizeof (arr2) / sizeof (*arr2) - 1;;
   uchar min = ~0;
   // тут вставить инициализацию arr1, arr2
 
   for (int i = 0; i < ARR1_SIZE; ++i)
   {
      if (arr1[i] < min && !hasElement(arr2, ARR2_SIZE, arr1[i]))
         min = arr1[i];
   }
 
   std::cout << min << std::endl;
 
}
0
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 21:08  [ТС] #23
Цитата Сообщение от Buckstabue Посмотреть сообщение
edw1n, ничего сложного там нет. Функция hasELement выполняет линейный поиск элемента в массиве и возвращает true в случае, если он найден.
В основном цикле обходим массив номер один и смотрим, меньше ли следующий элемент минимального, если да, то проверяем при помощи функции, содержится ли он во втором массиве, если нет, то получили новый минимальный элемент. Куда уже проще?
Вот чуть более продвинутая версия Здесь можно задавать массивы
Что за указатель const uchar *arr ? Где он применяется ?
А так же переменная element ?
0
Ласковая Киса
82 / 8 / 1
Регистрация: 11.01.2013
Сообщений: 55
14.04.2013, 21:30 #24
Цитата Сообщение от edw1n Посмотреть сообщение
Я понимаю, но выводить не должно d в данном случае, хотя бы потому что символ d есть в обеих массивах.
В общем весь код, что тут не так:
Проблема в проверке
C++
1
2
3
4
5
6
7
8
9
10
    for (i=0; i<5; i++)
    { 
        if (mas1[i]!=mas2[i])
        {
            if(mas1[i]<mas2[i])
                temp=mas1[i];
            else
                temp=mas2[i];
        }
    }
Вы сравниваете первый и первый елемент, второй и второй, но никогда не сравниваете первый и второй, первый и третий. В этот цикл нужно еще один for вписать и тогда всё будет работать
0
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 21:47  [ТС] #25
Цитата Сообщение от Ласковая Киса Посмотреть сообщение
Проблема в проверке
Вы сравниваете первый и первый елемент, второй и второй, но никогда не сравниваете первый и второй, первый и третий. В этот цикл нужно еще один for вписать и тогда всё будет работать
C++
1
2
3
4
5
6
7
8
9
10
11
    for (i=0; i<5; i++)
    {          for (j=0; j<5; j++) 
        { if (mas1[i]!=mas2[j])
          {
            if(mas1[i]<mas2[j])
                temp=mas1[i];
            else
                temp=mas2[j];
        }
             }
    }
Так что ли ? Не проверял ещё. Немного не пойму что вы имеете введу.
Извините если задаю глупые вопросы, пол дня сижу над этой задачей.
0
Ласковая Киса
82 / 8 / 1
Регистрация: 11.01.2013
Сообщений: 55
14.04.2013, 21:50 #26
Цитата Сообщение от edw1n Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
    for (i=0; i<5; i++)
    {          for (j=0; j<5; j++) 
        { if (mas1[i]!=mas2[j])
          {
            if(mas1[i]<mas2[j])
                temp=mas1[i];
            else
                temp=mas2[j];
        }
             }
    }
Так что ли ? Не проверял ещё. Немного не пойму что вы имеете введу.
Извините если задаю глупые вопросы, пол дня сижу над этой задачей.
Ну так лучше.
Только расставляйте отступы, код читать неудобно
0
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 21:54  [ТС] #27
Цитата Сообщение от Ласковая Киса Посмотреть сообщение
Ну так лучше.
Только расставляйте отступы, код читать неудобно
Не работает и так
Поиск символа в массиве
Всё равно d, а должно k.
0
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 22:07  [ТС] #28
Ой. Я там ошибся. Должно с выводить. Прошу прощения.
0
Ласковая Киса
82 / 8 / 1
Регистрация: 11.01.2013
Сообщений: 55
14.04.2013, 22:21 #29
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <iostream>
 
int main (void)
{   int i, j;
    char temp='z';
    char mas1[5];
    char mas2[5];
    printf ("Enter first massive\n");
    for(i=0; i<5; i++)
        scanf ("%c", &mas1[i]);
    printf ("Enter second massive\n");
    for(i=0; i<5; i++)
        scanf ("%c", &mas2[i]);
    int c;
    for(i=0;i!=5;i++)
    {
        c=0;
        for(j=0;j!=5;j++)//Поиск символа отсутствующего во втором массиве
        {
            if(mas1[i]==mas2[j])
            { 
                c=1;
                break;               
            }
        }
        if(c!=1 && mas1[i]<temp)
        {
            temp=mas1[i];
        }       
    }
    printf ("%c\n", temp);
    system ("pause");
    return 0;
}
Вот так работает.

Добавлено через 1 минуту
Только у Вас scanf в первую ячейку второго массива записывает '/n'(enter).
0
edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 22:25  [ТС] #30
Цитата Сообщение от Ласковая Киса Посмотреть сообщение
Только у Вас scanf в первую ячейку второго массива записывает '/n'(enter).
А как это исправить ?

Я когда пробовал сортировать по алфавиту бульбашкой, то abcde оно сортировало как bcde. Это с этим связано ?
Спасибо огромное за помощь.
0
14.04.2013, 22:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 22:25
Привет! Вот еще темы с ответами:

Поиск символа в слове - C++
задача состоит в том, чтобы написать программу (на С), кот. будет проверять правильно ли написано слово. Например, в слове не может быть...

Поиск вхождения символа - C++
Как реализовать поиск символа в строке? например, нужно найти не точку в 1 строке, потом неточку во второ й и сравнить позиции

Удаление последнего символа в массиве char - C++
Здравствуйте, создаю массив chat Text; GetWindowText(GetDlgItem(hTab, id), Text, 200); strcat(Text, &quot;*&quot;); ...

Поиск числа в двумерном массиве (бинарный поиск) - C++
Произвожу поиск элемента в массиве двумя способами: линейным(последовательным) поиском и бинарным(двоичным). Первый работает на ура. Второй...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru