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

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

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

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

22.06.2014, 19:04. Просмотров 2260. Ответов 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;
}
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++
Задание. Вычислить какая компания чаще всего участвовала в роли истца. У меня есть массив в котором хранятся названия компаний ...

56
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
22.06.2014, 19:32 #2
Цитата Сообщение от MMt Посмотреть сообщение
Так можно делать?
Нет.
0
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
22.06.2014, 19:39  [ТС] #3
почему?
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
22.06.2014, 19:45 #4
Цитата Сообщение от MMt Посмотреть сообщение
почему?
Потому что выражение в case должно быть целочисленной константой.
0
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
22.06.2014, 19:53  [ТС] #5
Значит тут единственный способ это по-символьно сравнивать каждый массив?
какой есть способ или логика... надо сравнить вводимую строку с одной из возможно-доступных.
0
Jewbacabra
Эксперт PHP
2661 / 2248 / 845
Регистрация: 24.04.2014
Сообщений: 6,752
22.06.2014, 19:55 #6
MMt, http://www.cplusplus.com/reference/cstring/strcmp/
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
22.06.2014, 20:03 #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 вместо С-строк, для него определён оператор ==, который сравнивает посимвольно.
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.06.2014, 23:29 #8
Цитата Сообщение от MMt
Триугольник(rtiugolnik)
OMFG.
MMt, используйте лучше std::string, хотя это и не решит проблему со switch, но кол-во их уменьшит в будущем.
А если очень хочется использовать ветвление по строкам - welcome to C#.
0
gray_fox
22.06.2014, 23:36
  #9

Не по теме:

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

0
Tulosba
22.06.2014, 23:43
  #10

Не по теме:

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

0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,673
Записей в блоге: 5
23.06.2014, 01:26 #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 ;
}
0
pEntity
12 / 7 / 1
Регистрация: 12.12.2012
Сообщений: 433
23.06.2014, 07:39 #12
C++11 может свитчить строки. Гугальнити.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.06.2014, 10:22 #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.
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,673
Записей в блоге: 5
23.06.2014, 14:36 #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)) поэтому решил и в перечислении сделать. Потом в проверке ввода этот вариант исключил и получилась преждевременная оптимизация. Хотя такое перечисление может пригодится и не только для ввода с клавиатуры.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.06.2014, 14:43 #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();
Вот чтоб такого не было надо использовать виртуальные функции с иерархией классов.
0
23.06.2014, 14:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2014, 14:43
Привет! Вот еще темы с ответами:

Как сравнить элемент массива с другими элементами этого же по значению? - 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++
Или столбца.


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

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

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