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

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

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

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

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

Задача:

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

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

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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];
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].
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
14.04.2013, 20:31     Поиск символа в массиве #18
edw1n, потому что элементы сравниваются попарно, нужно каждый элемент первого сравнивать со вторым.
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;
}
Спасибо.
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;
 
}
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
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
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
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
7 / 7 / 1
Регистрация: 12.11.2012
Сообщений: 114
14.04.2013, 21:54  [ТС]     Поиск символа в массиве #27
Цитата Сообщение от Ласковая Киса Посмотреть сообщение
Ну так лучше.
Только расставляйте отступы, код читать неудобно
Не работает и так
Поиск символа в массиве
Всё равно d, а должно k.
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).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 22:25     Поиск символа в массиве
Еще ссылки по теме:

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

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

Поиск символа в текстовом файле - C++
Как можно организовать поиск введенного символа в txt файле?

Поиск символа с конца строки - C++
Здравствуйте.. Как найти символ с конца строки ? Например : предложение - просто тестовый вариант. И нужно определить...

Поиск позиции символа в строке - C++
Здравствуйте, у меня есть строка со словом и строка с прочерками (--------), длина у них одинаковая, есть кнопки, на которых буквы...


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

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

Я когда пробовал сортировать по алфавиту бульбашкой, то abcde оно сортировало как bcde. Это с этим связано ?
Спасибо огромное за помощь.
Yandex
Объявления
14.04.2013, 22:25     Поиск символа в массиве
Ответ Создать тему
Опции темы

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