Форум программистов, компьютерный форум CyberForum.ru

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

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

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

Помогите, пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2013, 18:41     Поиск символа в массиве
Посмотрите здесь:

C++ Поиск символа в слове
Поиск символа - непойму C++
C++ Поиск символа на консоли
Поиск вхождения символа C++
C++ поиск символа в строке...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
edw1n
 Аватар для 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;
 
}
Хахах, боюсь у меня препод такой код не поймет. Куда там мне.
Да. Он у нас такой.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Buckstabue
 Аватар для 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;
 
}
edw1n
 Аватар для edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 21:08  [ТС]     Поиск символа в массиве #23
Цитата Сообщение от Buckstabue Посмотреть сообщение
edw1n, ничего сложного там нет. Функция hasELement выполняет линейный поиск элемента в массиве и возвращает true в случае, если он найден.
В основном цикле обходим массив номер один и смотрим, меньше ли следующий элемент минимального, если да, то проверяем при помощи функции, содержится ли он во втором массиве, если нет, то получили новый минимальный элемент. Куда уже проще?
Вот чуть более продвинутая версия Здесь можно задавать массивы
Что за указатель const uchar *arr ? Где он применяется ?
А так же переменная element ?
Ласковая Киса
 Аватар для Ласковая Киса
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 вписать и тогда всё будет работать
edw1n
 Аватар для 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];
        }
             }
    }
Так что ли ? Не проверял ещё. Немного не пойму что вы имеете введу.
Извините если задаю глупые вопросы, пол дня сижу над этой задачей.
Ласковая Киса
 Аватар для Ласковая Киса
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];
        }
             }
    }
Так что ли ? Не проверял ещё. Немного не пойму что вы имеете введу.
Извините если задаю глупые вопросы, пол дня сижу над этой задачей.
Ну так лучше.
Только расставляйте отступы, код читать неудобно
edw1n
 Аватар для edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 21:54  [ТС]     Поиск символа в массиве #27
Цитата Сообщение от Ласковая Киса Посмотреть сообщение
Ну так лучше.
Только расставляйте отступы, код читать неудобно
Не работает и так
Поиск символа в массиве
Всё равно d, а должно k.
edw1n
 Аватар для edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 22:07  [ТС]     Поиск символа в массиве #28
Ой. Я там ошибся. Должно с выводить. Прошу прощения.
Ласковая Киса
 Аватар для Ласковая Киса
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).
edw1n
 Аватар для edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 22:25  [ТС]     Поиск символа в массиве #30
Цитата Сообщение от Ласковая Киса Посмотреть сообщение
Только у Вас scanf в первую ячейку второго массива записывает '/n'(enter).
А как это исправить ?

Я когда пробовал сортировать по алфавиту бульбашкой, то abcde оно сортировало как bcde. Это с этим связано ?
Спасибо огромное за помощь.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
14.04.2013, 22:27     Поиск символа в массиве #31
edw1n, это связано с тем, что символ перехода на новую строку остается в потоке после ввода первого массива, нужно сделать cin.ignore().

Добавлено через 48 секунд
edw1n, вот ваш вариант, думаю вам он будет понятней

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
36
37
38
39
40
41
#include <stdio.h>
#include <iostream>
using namespace std;
 
int main (void)
{   int i, j; char temp;
    char mas1[6];
    char mas2[6];
    printf ("Enter first massive\n");
        cin >> mas1;
    printf ("Enter second massive\n");
        cin >> mas2;
 
    char min;
    bool flag(false);
    for (i=0; i<5; i++){
            if(mas1[i] != mas2[i]){             //ищем первый не совпадающий(бдет минимум)
                min = mas1[i];
                flag = true;
                break;
            }
            if(flag == true)
                break;
    }
 
 
    for (i=0; i<5; i++)
        {
            if(mas1[i] != mas2[i])
            {
                temp = mas1[i];
 
                if(min > temp)
                    min = temp;
            }
        }
       
    printf ("%c\n", temp);
system ("pause");
return 0;
}
edw1n
 Аватар для edw1n
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 22:30  [ТС]     Поиск символа в массиве #32
Цитата Сообщение от yoghurt92 Посмотреть сообщение
edw1n, это связано с тем, что символ перехода на новую строку остается в потоке после ввода первого массива, нужно сделать cin.ignore().

Добавлено через 48 секунд
edw1n, вот ваш вариант, думаю вам он будет понятней
И вам огромное спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 22:31     Поиск символа в массиве
Еще ссылки по теме:

поиск символа A в слове В C++
C++ Изменение некоторого символа в массиве
C++ Поиск символа не могу переделать под поиск сочетания символов

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

Или воспользуйтесь поиском по форуму:
Ласковая Киса
 Аватар для Ласковая Киса
82 / 8 / 1
Регистрация: 11.01.2013
Сообщений: 55
14.04.2013, 22:31     Поиск символа в массиве #33
Цитата Сообщение от edw1n Посмотреть сообщение
Я когда пробовал сортировать по алфавиту бульбашкой, то abcde оно сортировало как bcde. Это с этим связано ?
Спасибо огромное за помощь.
Ну с этим и связано. Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    for(i=0; i<6; i++)
        scanf ("%c", &mas2[i]);
    int c;
    for(i=0;i!=5;i++)
    {
        c=0;
        for(j=1;j!=6;j++)//Поиск символа отсутствующего во втором массиве
        {
            if(mas1[i]==mas2[j])
            { 
                c=1;
                break;               
            }
        }
        if(c!=1 && mas1[i]<temp)
        {
            temp=mas1[i];
        }       
    }
Yandex
Объявления
14.04.2013, 22:31     Поиск символа в массиве
Ответ Создать тему
Опции темы

Текущее время: 17:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru