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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
#1

Как сравнить 2 массива - C++

22.06.2014, 19:04. Просмотров 2018. Ответов 56
Метки нет (Все метки)

в общем идея.
есть строчный массив не инициализирвоанный. Массив я заполняю сам через син.
Вопрос - можно ли в зависимости от того что я введу потом сравнить через свич с доступными в свиче константами?

например. я массиву задаю данные kvadrat. и така я строка встречается в свиче... Так можно делать?

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
int main(){
    setlocale(0,"");
    
    char s;
    int param;
    char mChoice[50];
    
    
    
    cout    << "Выберите фигуру:\n"
            <<"Квадрат(kvadrat) \n"
            <<"Круг(krug)\n"
            <<"Прямоугольник(pryamougolnik)\n"
            <<"Триугольник(rtiugolnik)\n";
            
    cin >> mChoice;
    cout    << mChoice;
 
    switch(mChoice){
        case 'kvadrat':
                cout    <<"verno - kvadrat. \n";
        case "krug":
                cout    <<"verno krug. \n";
                
    }
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2014, 19:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сравнить 2 массива (C++):

Как сравнить два массива - C++
Здравствуйте форумчане! Помогите пожалуйста, скажите как сравнить два массива побитово и побайтово. В инете ни чего не могу найти((

Как сравнить элемент массива? - C++
как сравнить елемент массива? mas j в нем записана цифра 46 мне нужно найти его номер по порядку, равен ли он 170, как это сделать? ...

Как сравнить элемент двумерного массива? - C++
if (map != map) массив char

Как сравнить сумму элементов массива? - C++
нужно сравнить сумму элементов массива, ввод при помощи for осуществляется(

Как сравнить элементы массива string и char? - C++
Есть два массива: mas_ascii и str содержащий текст с файла char mas_ascii ; for (int i = 0; i &lt; 256; ++i) { mas_ascii...

Как сравнить два элемента массива типа string? - C++
Задание. Вычислить какая компания чаще всего участвовала в роли истца. У меня есть массив в котором хранятся названия компаний ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,567
Записей в блоге: 4
23.06.2014, 14:46 #16
Цитата Сообщение от IGPIGP Посмотреть сообщение
может пригодится и не только для ввода с клавиатуры.
его, кстати, тоже думал сделать со switch'ём. Нагляднее получается. Ночью надо спатьj

Добавлено через 2 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
Вот чтоб такого не было надо использовать виртуальные функции с иерархией классов.
Даже спорить не стану. Не знаю я чему быть стоит, а чему нет.
Psilon
Master of Orion
Эксперт .NET
5887 / 4784 / 633
Регистрация: 10.07.2011
Сообщений: 14,405
Записей в блоге: 5
Завершенные тесты: 4
23.06.2014, 16:32 #17
IGPIGP, у вас ООП головного мозга Оверинжинеринг до добра не доведет. Я вам как шарпист говорю

MMt,
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
int main(){
    setlocale(0,"");
    
    char s;
    int param;
    int mChoice;
    
    
    
    cout    << "Выберите фигуру:"<< endl;
            <<"Квадрат(1) "<< endl;
            <<"Круг(2)"<< endl;
            <<"Прямоугольник(3)"<< endl;
            <<"Треугольник(4)" << endl;
            
    cin >> mChoice;
    cout    << mChoice;
 
    switch(mChoice){
        case 1:
                cout    <<"verno - kvadrat." << endl;
                break;
        case 2:
                cout    <<"verno krug." << endl;
                break;
        default:
                cout << "Takogo varianta net kak bi" << endl;
                break;
    }
return 0;
}
Добавлено через 51 секунду
и да, switch fall through - это беда
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
23.06.2014, 18:30  [ТС] #18
Народ, спасибо за помощь. Задачку через менюшку с целочисленными значениями я уже написал. было интересно сделать именно через сравнение строк. Еще раз всем спасибо.
pEntity
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 391
24.06.2014, 04:06 #19
Tulosba, http://habrahabr.ru/post/166201/
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.06.2014, 07:49 #20
pEntity, вы статью-то читали или хватило заголовка? Свитч по значениям хеш-функций, вычисленных для строк - не есть свитч по строкам.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,567
Записей в блоге: 4
27.06.2014, 02:59 #21
Цитата Сообщение от Psilon Посмотреть сообщение
IGPIGP, у вас ООП головного мозга
Где?
Вообще, вопрос ТС был связан с с использованием строковой переменной в качестве ключа, для выбора в операторе switch. Я показал вариант не повторяя сказанное. Может и не блестяще, но главное же в том, что нужен целочисленный вариант. Константы перечисления в качестве ключей оператора switch и/или индексов массива, достаточно древний прём, позволяющий писать самодокументирующий код.
http://www.c-cpp.ru/books/perechisleniya
Хотя ссылок можно найти и больше. Нет тут оверинжениаринга, а что касается ОПП головного мозга, то это же лесть?
Вот тут и виртуальное наследование предлагали. Ну и что? Так видит человек. Конечно, когда виртуальные методы могут иметь одну сигнатуру, то есть обобщение целесообразно, то это удобно. Но меню, например может предполагать совершенно различные реакции на выбор того или иного варианта. Впрочем, опять же, при желании и так можно. И никаких диагнозов. Говорю как психоаналитик, психоаналитику.
Свич кстати, хоть и громоздок, но всё же удобнее массива в том, что расширять перечисление позволяет в любом порядке. Тогда в операторе появляется новая строчка и всё.
Что до массивов, то в с++ можно явно указать тип констант перечисления, а как с этим в C#? Что, действительно нужно явно преобразовывать?
DrOffset
7090 / 4231 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
27.06.2014, 03:58 #22
Цитата Сообщение от Tulosba Посмотреть сообщение
вы статью-то читали или хватило заголовка? Свитч по значениям хеш-функций, вычисленных для строк - не есть свитч по строкам.
Дык такой "свитч" и в с++03 можно сделать к тому же Правда пострашнее будет выглядеть.

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Где?
Тоже, честно говоря, не понял к чему это он написал.
Есть подозрение, что это он на самом деле ошибся адресом или не знает что значит сочетание "ООП головного мозга".

Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.06.2014, 09:52 #23
Цитата Сообщение от DrOffset Посмотреть сообщение
Дык такой "свитч" и в с++03 можно сделать к тому же Правда пострашнее будет выглядеть.
На шаблонах наверное?
DrOffset
7090 / 4231 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
27.06.2014, 11:42 #24
Цитата Сообщение от Tulosba Посмотреть сообщение
На шаблонах наверное?
Принцип посмотреть можно в boost::mpl::string. Дальше реализуется хэш-функция (ну естественно на шаблонах) и дело в шляпе.
Psilon
Master of Orion
Эксперт .NET
5887 / 4784 / 633
Регистрация: 10.07.2011
Сообщений: 14,405
Записей в блоге: 5
Завершенные тесты: 4
27.06.2014, 12:01 #25
Цитата Сообщение от IGPIGP Посмотреть сообщение
Где?
Вообще, вопрос ТС был связан с с использованием строковой переменной в качестве ключа, для выбора в операторе switch. Я показал вариант не повторяя сказанное. Может и не блестяще, но главное же в том, что нужен целочисленный вариант. Константы перечисления в качестве ключей оператора switch и/или индексов массива, достаточно древний прём, позволяющий писать самодокументирующий код.
свитч как раз идеален для выбора одного варианта из многих. Если свитчей много, и они одинаковые по смыслу, то есть смысл отрефакторить, сделать классы и уже с ними работать. Короче, все по Фаулеру
Цитата Сообщение от IGPIGP Посмотреть сообщение
Свич кстати, хоть и громоздок, но всё же удобнее массива в том, что расширять перечисление позволяет в любом порядке. Тогда в операторе появляется новая строчка и всё.
Что до массивов, то в с++ можно явно указать тип констант перечисления, а как с этим в C#? Что, действительно нужно явно преобразовывать?
С++ редко может предложить что-то, чего нету в C#, кроме низкого уровня (хотя никто не мешает самому в C# указателями бегать по памяти, так что разница больше в IL vs ASM). Если я понял, имелось ввиду что-то вроде:
C#
1
2
3
4
    public enum MyEnum
    {
        First,Second
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
        public static string Foo(MyEnum myEnum)
        {
            switch (myEnum)
            {
            case MyEnum.First:
                return "First catch!";
            case MyEnum.Second:
                return myEnum.ToString();
            default:
                throw new InvalidEnumArgumentException("myEnum", (int) myEnum, typeof (MyEnum));
            }
        }
Цитата Сообщение от IGPIGP Посмотреть сообщение
что касается ОПП головного мозга, то это же лесть?
нет, это диагноз

Добавлено через 2 минуты
Кстати, если также интересно, как работает switch на строках в шарпе, то вот неплохое объяснение
http://stackoverflow.com/questions/9...elseif-on-type
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,567
Записей в блоге: 4
27.06.2014, 14:53 #26
Цитата Сообщение от Psilon Посмотреть сообщение
как работает switch на строках в шарпе, то вот неплохое объяснение
То есть маленькие строки в многократно повторяющемся коде сравниваются медленнее, если я правильно понял. Это вполне логично. Большие и так толстые и им трудно, поэтому сравнивать их медленно это бесчеловечно.
Маппинг больших строк (как они большие от маленьких отличают?), это и есть та несложная работа, которую нужно бы сделать до компиляции, пусть даже jit. Перейти от слов к делу, то есть к целочисленной логике лучше до написания кода, а не предлагать это делать среде выполнения. Хотя конечно, писать используя такие возможности легче и быстрее.
Psilon
Master of Orion
Эксперт .NET
5887 / 4784 / 633
Регистрация: 10.07.2011
Сообщений: 14,405
Записей в блоге: 5
Завершенные тесты: 4
27.06.2014, 14:59 #27
IGPIGP, во-первых
Цитата Сообщение от IGPIGP Посмотреть сообщение
то есть маленькие строки в многократно повторяющемся коде сравниваются медленнее, если я правильно понял. Это вполне логично. Большие и так толстые и им трудно, поэтому сравнивать их медленно это бесчеловечно.
читали через строчку. Размер строк не имеет значение, вопрос в числе ветвлений switch'а.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Маппинг больших строк (как они большие от маленьких отличают?), это и есть та несложная работа, которую нужно бы сделать до компиляции, пусть даже jit. Перейти от слов к делу, то есть к целочисленной логике лучше до написания кода, а не предлагать это делать среде выполнения. Хотя конечно, писать используя такие возможности легче и быстрее.
JIT-компилятору отводится примерно 50мс на компиляцию метода, поэтому -О3 тут как-то не выходит. Зато .Net native использует С++ оптимизации для C# кода, что дает ему практически такую же производительность, запуск без фреймворка, ну и прочие прелести.
Tulosba
27.06.2014, 15:04
  #28

Не по теме:

Цитата Сообщение от Psilon Посмотреть сообщение
С++ оптимизации для C# кода, что дает ему практически такую же производительность, запуск без фреймворка, ну и прочие прелести.
У меня начинает складываться впечатление, что кое-кто переманивает клиентов с ветки "C++" в ветку "C#"

IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,567
Записей в блоге: 4
27.06.2014, 15:16 #29
Цитата Сообщение от Psilon Посмотреть сообщение
Размер строк не имеет значение, вопрос в числе ветвлений switch'а.
Дык там же англицким по белому написано, что имеет. Не для числа ветвлений, а для способа сравнения - раз и способа перехода к нужной ветви, - два.
Для малых строк сравниваются строки - раз, и делается это последовательно ( if...elseif) для отыскания нужной ветки, - два.
Для "больших" - сначала создаётся словарь хеш-значение, а потом целочисленный ключ используется для прыжка в нужную ветку как индекс массива. То есть по-человечески. Но свитч нагляднее массива и проще в расширении. Я кстати этот вариант и озвучивал, - перечисление+свитч (а получилось, - массив)), - расширяй, - не хочу.

Добавлено через 6 минут
Цитата Сообщение от Tulosba Посмотреть сообщение
У меня начинает складываться впечатление, что кое-кто переманивает клиентов с ветки "C++" в ветку "C#"
Учитывая то о чём спрашивал ТС, всё достаточно равно-приближенно к теме.
Плюсовикам можно не беспокоится, - в любой книжке о C# легко найти слова вроде: "если вы пришли из с++, то здесь то что вы привыкли делать так, выглядит эдак..." и тд. и тп. то есть нужно же сначала в плюсы зайти, чтобы выйти потом. Так что всё нормально.
Psilon
Master of Orion
Эксперт .NET
5887 / 4784 / 633
Регистрация: 10.07.2011
Сообщений: 14,405
Записей в блоге: 5
Завершенные тесты: 4
27.06.2014, 16:17 #30

Не по теме:

У меня начинает складываться впечатление, что кое-кто переманивает клиентов с ветки "C++" в ветку "C#"
да, евангелисты .Net они такие...


Цитата Сообщение от IGPIGP Посмотреть сообщение
Дык там же англицким по белому написано, что имеет. Не для числа ветвлений, а для способа сравнения - раз и способа перехода к нужной ветви, - два.
еще раз читаем
If the switch statement is "small enough" (where the compiler does what it thinks is best automatically) switching on strings generates code that is the same as an if/else chain.
переводим: "Если размер switch'а "достаточно мал" (тут имеется ввиду число ветвлений), свитч по строкам генерируется в if/else последовательность". Про аргументы case-выражений, в данном случае строки - ни слова.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Плюсовикам можно не беспокоится, - в любой книжке о C# легко найти слова вроде: "если вы пришли из с++, то здесь то что вы привыкли делать так, выглядит эдак..." и тд. и тп. то есть нужно же сначала в плюсы зайти, чтобы выйти потом. Так что всё нормально.
хз, лично я переходил на шарп с дельфей (синтаксис на паскалевский поначалу был немного похож, Writeln -> Console.WriteLine, Readln -> Console.ReadLine() и тп), а уже потом опускался C++->C->ASM->машкод
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2014, 16:17
Привет! Вот еще темы с ответами:

Как сравнить элемент массива с другими элементами этого же по значению? - C++
Здравствуйте, мне нужно сравнить определенный элемент массива с другими элементами по значению. К примеру дан массив чисел. Мне нужно...

Нюансы синтаксиса: как сравнить каждый элемент массива с переменной в условии оператора if ? - C++
Привет всем дорогие друзья с толкнулся с такой проблемой, начал ходить на уроки с++ и приступил к изучению массива сталкнулся с такой...

Найти среднее арифметическое элементов массива, сравнить два массива поэлементно - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; void main() { float x, y, SA; int K, KOL,...

Как можно взять один элемент двумерного массива и сравнить его с элементами его строки? - C++
Или столбца.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.06.2014, 16:17
Закрытая тема Создать тему
Опции темы

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