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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.06.2014, 19:04     Как сравнить 2 массива #1
в общем идея.
есть строчный массив не инициализирвоанный. Массив я заполняю сам через син.
Вопрос - можно ли в зависимости от того что я введу потом сравнить через свич с доступными в свиче константами?

например. я массиву задаю данные 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++ Помогите сравнить 2 массива.
Сравнить 2 массива C++
C++ как сравнить сумму элементов массива?
Как сравнить два массива C++
C++ Как сравнить элемент двумерного массива?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
22.06.2014, 19:32     Как сравнить 2 массива #2
Цитата Сообщение от MMt Посмотреть сообщение
Так можно делать?
Нет.
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.06.2014, 19:39  [ТС]     Как сравнить 2 массива #3
почему?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
22.06.2014, 19:45     Как сравнить 2 массива #4
Цитата Сообщение от MMt Посмотреть сообщение
почему?
Потому что выражение в case должно быть целочисленной константой.
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.06.2014, 19:53  [ТС]     Как сравнить 2 массива #5
Значит тут единственный способ это по-символьно сравнивать каждый массив?
какой есть способ или логика... надо сравнить вводимую строку с одной из возможно-доступных.
Jewbacabra
1787 / 1502 / 538
Регистрация: 24.04.2014
Сообщений: 4,215
22.06.2014, 19:55     Как сравнить 2 массива #6
MMt, http://www.cplusplus.com/reference/cstring/strcmp/
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
22.06.2014, 20:03     Как сравнить 2 массива #7
Цитата Сообщение от MMt Посмотреть сообщение
какой есть способ или логика...
C++
1
2
3
4
5
if (std::strcmp(mChoice, "kvadrat") == 0) {
   // square
} else if (std::strcmp(mChoice, "krug") == 0) {
   // circle
}
Либо используй std::string вместо С-строк, для него определён оператор ==, который сравнивает посимвольно.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.06.2014, 23:29     Как сравнить 2 массива #8
Цитата Сообщение от MMt
Триугольник(rtiugolnik)
OMFG.
MMt, используйте лучше std::string, хотя это и не решит проблему со switch, но кол-во их уменьшит в будущем.
А если очень хочется использовать ветвление по строкам - welcome to C#.
gray_fox
22.06.2014, 23:36
  #9

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Сообщение от MMt
Триугольник(rtiugolnik)
OMFG.
Всё ещё удивляет подобное в этом разделе? )

Tulosba
22.06.2014, 23:43
  #10

Не по теме:

gray_fox, я ожидал хотя бы rttiugolnik

IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6160 / 2889 / 282
Регистрация: 04.12.2011
Сообщений: 7,689
Записей в блоге: 3
23.06.2014, 01:26     Как сравнить 2 массива #11
Цитата Сообщение от MMt Посмотреть сообщение
Массив я заполняю сам через син.
Это требует терпения. Писать строки в консоли чтобы выбрать один из 2 - 10-ти вариантов идея не слишком удачная. Лучше предложите менюшку с целочисленным выбором. Чтобы самому не путаться, в качестве индексов массива строк списка, можно использовать перечисление в котором имена констант сами Вам подскажут на что они покажут. Да и от ошибок ввода будет меньше мороки.
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
42
43
44
45
#include <iostream>
using namespace std ;
const int n = 6;
enum Figure:unsigned {none, triangle, rectangle, square, circle, ellipse};
char *Figure_names[]={0, "triangle","rectangle","square","circle","ellipse"};
 
char *get_figure_name(int i){
    if(i < 0 || i >n-1) {
cout << "Bad choise " << i << endl;
return 0;
    }
return Figure_names[i];
}
 
int main()
{
    int choise=0;
    do{
    cout << "Select the figure number or exit:"<<endl;
for( int i = 1; i < n; ++i) cout << get_figure_name(i) << " -\t" << i << endl;
cout << "exit -\t\t" <<0 << endl;
cin >> choise;
if( get_figure_name(choise) ){
    cout <<"Selected figure is: "<<get_figure_name(choise);
}else {
    if(!choise)
    {
        cout<<choise << " Bye!" << endl; 
    break;
    }else {
        choise=0; 
        cout<<"Repeat your try, please." << endl;
        system("pause") ;
        system("cls");
        continue;
    }
}
cout << endl;
//тут пишете что нужно делать с выбранной фигурой
//-------------------
    }while(!choise);
cout << endl;
system("pause") ;
return 0 ;
}
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
23.06.2014, 07:39     Как сравнить 2 массива #12
C++11 может свитчить строки. Гугальнити.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.06.2014, 10:22     Как сравнить 2 массива #13
Цитата Сообщение от pEntity Посмотреть сообщение
C++11 может свитчить строки.
Зачем так нагло врать?

Добавлено через 13 минут
IGPIGP, перечисление Figure ввели, но не используете. Почему?
Массив Figure_names должен иметь тип const char*, т.к. его элементы - указатели на строковые литералы, которые нельзя изменять. Аналогично для возвращаемого значения get_figure_name().
choise -> choiсe
Нулевой элемент Figure_names не нужен, т.к. тоже нигде не используется.
Условие в строке 8 (и 20) можно построить на размере Figure_names, используя sizeof. Таким образом избавимся от n.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6160 / 2889 / 282
Регистрация: 04.12.2011
Сообщений: 7,689
Записей в блоге: 3
23.06.2014, 14:36     Как сравнить 2 массива #14
Цитата Сообщение от Tulosba Посмотреть сообщение
IGPIGP, перечисление Figure ввели, но не используете. Почему?
Да забыл. Имел ввиду нечто вроде:
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
void draw_triangle(){
cout<<"draw_triangle()"<<endl;
}
void draw_rectangle(){
cout<<"draw_rectangle()"<<endl;
}
void draw_square(){
cout<<"draw_square()"<<endl;
}
void draw_circle(){
cout<<"draw_circle()"<<endl;
}
void draw_ellipse(){
cout<<"draw_ellipse()"<<endl;
}
 
void draw_something(){
cout<<"something goes wrong..."<<endl;
}
int main()
{
//---------------------------------------
 
 
 
//тут пишете что нужно делать с выбранной фигурой
//-------------------
//ну например:
switch(choise){//хотелось же swich... забыл дописать
case triangle: draw_triangle(); break;
case rectangle: draw_rectangle(); break;
case square: draw_square(); break;
case circle: draw_circle(); break;
case ellipse: draw_ellipse(); break;
default :  draw_something();
}

Хотя если создать массив указателей на функции, то и тут switch не нужен. Про const тоже верно. Ноль - используется в if(get_figure_name(choise)) поэтому решил и в перечислении сделать. Потом в проверке ввода этот вариант исключил и получилась преждевременная оптимизация. Хотя такое перечисление может пригодится и не только для ввода с клавиатуры.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.06.2014, 14:43     Как сравнить 2 массива #15
Цитата Сообщение от IGPIGP Посмотреть сообщение
C++
1
2
3
4
5
6
7
switch(choise){//хотелось же swich... забыл дописать 
case triangle: draw_triangle(); break; 
case rectangle: draw_rectangle(); break; 
case square: draw_square(); break; 
case circle: draw_circle(); break; 
case ellipse: draw_ellipse(); break; 
default : draw_something();
Вот чтоб такого не было надо использовать виртуальные функции с иерархией классов.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6160 / 2889 / 282
Регистрация: 04.12.2011
Сообщений: 7,689
Записей в блоге: 3
23.06.2014, 14:46     Как сравнить 2 массива #16
Цитата Сообщение от IGPIGP Посмотреть сообщение
может пригодится и не только для ввода с клавиатуры.
его, кстати, тоже думал сделать со switch'ём. Нагляднее получается. Ночью надо спатьj

Добавлено через 2 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
Вот чтоб такого не было надо использовать виртуальные функции с иерархией классов.
Даже спорить не стану. Не знаю я чему быть стоит, а чему нет.
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
23.06.2014, 16:32     Как сравнить 2 массива #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
Сообщений: 168
23.06.2014, 18:30  [ТС]     Как сравнить 2 массива #18
Народ, спасибо за помощь. Задачку через менюшку с целочисленными значениями я уже написал. было интересно сделать именно через сравнение строк. Еще раз всем спасибо.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
24.06.2014, 04:06     Как сравнить 2 массива #19
Tulosba, http://habrahabr.ru/post/166201/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2014, 07:49     Как сравнить 2 массива
Еще ссылки по теме:

Как сравнить элемент массива? C++
C++ Найти среднее арифметическое элементов массива, сравнить два массива поэлементно
C++ Как сравнить два элемента массива типа string?

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.06.2014, 07:49     Как сравнить 2 массива #20
pEntity, вы статью-то читали или хватило заголовка? Свитч по значениям хеш-функций, вычисленных для строк - не есть свитч по строкам.
Yandex
Объявления
24.06.2014, 07:49     Как сравнить 2 массива
Закрытая тема Создать тему
Опции темы

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