0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
1

Сравнение строки в структуре с переменной типа char

30.03.2012, 15:17. Показов 8082. Ответов 12
Метки нет (Все метки)

Есть некая функция Х которая возвращает кол-во строк структуры Poezda a[], строка a[].StNazn в которой равна введеному с клавиатуры c и создает структуру Poezda b[] в которую записывает те строки в а[] которые совпали с "с". я наверное плхо объяснила, но всё же. проблемма в том что строка структуры и "с" не хотят стравниваться. как бы так их сравнить чтобы всёбыло ок?))
C++
1
2
3
4
5
6
7
int X(Poezda a[],Poezda b[],int n,char с)
{
    int k=0;
    for(int i=0;i<n;i++)
        if (...) b[k++]=a[i];
    return k;
}


Вот текст задания
Сравнение строки в структуре с переменной типа char

и full код который уже есть. осталось только подставить в 46 строчке вместо ... сравнение)))
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
struct Poezda
{
    char Nomer[5];
    char StNazn[20];
    char TimeOtpr[20];
    char TimeVputi[20];
    char NalBilet[10];
};
void output ( Poezda a[], int n)
{
    cout<<"Номер|"<<setw(9)<<"Станция Назначения|"<<setw(9)<<"Время отправления|"<<setw(15)
            <<"Время в пути|"<<setw(7) <<"Наличие билетов|"<<endl;
    for(int i=0;i<n;i++)
    {
        cout<<"__________________________________________________________________________"<<endl;
        cout<<setw(2)<<a[i].Nomer<<"|"<<setw(19)<<a[i].StNazn<<"|"<<setw(17)<<a[i].TimeOtpr<<"|"
                   <<setw(14)<<a[i].TimeVputi<<"|"<<setw(15)<<a[i].NalBilet<<"|";
        cout<<endl;
    }
}
void sort(Poezda a[],int n)
{
    Poezda min;
    int n_min;
    for(int i=0;i<n;i++)
    {
        min=a[i];n_min=i;
        for(int j=i;j<n;j++)
            if(strcmp(a[j].TimeOtpr,min.TimeOtpr)<0)
            {
                min=a[j];
                n_min=j;
            }
            a[n_min]=a[i];
            a[i]=min;
    }
}
int X(Poezda a[],Poezda b[],int n,char c[20])
{
    int k=0;
    for(int i=0;i<n;i++)
        if (...) b[k++]=a[i];
    return k;
}
int main()
{
    setlocale (LC_CTYPE, "Russian");
    Poezda t[10]={
        "126Э","Новороссийск","00:25","30ч.","да",
        "244В","Рузаевка","10:50","10 ч. 13 мин.","нет",
        "232M","Казань","00:30","12 ч. 49 мин.","да",
        "356Й","Уфа","12:26","30 ч.","да",
        "252В","Саранск","01:20","10 ч. 18 мин.","нет",
        "030С","Новороссийск","10:20","23 ч. 26 мин.","да",
        "104М","Адлер","08.20","27 ч.","да",
        "082И","Улан-Удэ","13:10","88 ч.","да",
        "076Э","Тында","13:10","116 ч.","нет"
    };
    cout<<"input"<<endl<<endl<<endl;
    output(t,10);
    sort(t,10);
    cout<<endl<<endl<<"Out"<<endl<<endl<<endl;
    output(t,10);
    Poezda b[10];
    
    char c[20];
    cout<<endl<<"Введите станцию назначения"<<endl; cin>>c[20];
    int k=X(t,b,10,c);
    cout<<k;
        if(k!=0) output(b,k);
    system("pause");
    }
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2012, 15:17
Ответы с готовыми решениями:

Как присвоить значение одного из элементов массива типа char переменной типа int?
С++ начал буквально только что так что буду благодарен за терпение и понимание ) Сразу оговорюсь...

Сравнение типа char
есть функция, которая получает значение класса, и сравнивает его с вводимым пользователем...

Сравнение char переменной с символом
Здравствуйте, подскажите пожалуйста как сравнить char переменной с символом, так как я пытаюсь...

LNK2019 при объявлении переменной типа из пространства имен в структуре
Доброго времени суток! Возникла такая проблема , при использовании типа определенного в...

12
Модератор
Эксперт С++
11335 / 9304 / 5587
Регистрация: 18.12.2011
Сообщений: 24,818
30.03.2012, 15:38 2
C++
1
if(strcmp(a[].StNazn ,c)==0)  b[k++]=a[i];
0
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
30.03.2012, 15:41  [ТС] 3
zss, Я так уже делала. не работает. Возвращает к=0
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 15:46 4
Там с кодировками какие-то проблемы

Добавлено через 1 минуту
С английскими названиями проблем нету
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    int X(Poezda a[],Poezda b[],int n,char c[20])
    {
        int k=0;
        for(int i=0;i<n;i++)
                {                            
                 if (strcmp(a[i].StNazn ,c)==0)
                  {
                   b[k]=a[i];
                   k++;
                  }
                }
        return k;
    }
0
Модератор
Эксперт С++
11335 / 9304 / 5587
Регистрация: 18.12.2011
Сообщений: 24,818
30.03.2012, 15:46 5
Цитата Сообщение от ms.natali Посмотреть сообщение
Я так уже делала.
Может быть там лишний символ перевода строки в конце.
Попробуйте заменить на
C++
1
    if(strncmp(a[].StNazn ,c,strlen(c)-1)==0)  b[k++]=a[i];
0
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
30.03.2012, 16:03  [ТС] 6
Нет. это тоже не работает. Возвращает 0. Меня больше волнует тот факт, что после того как программа вывела"нажмите клавишу для продолжения..." и я нажала эту клавишу вылезает окошко
Сравнение строки в структуре с переменной типа char
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
30.03.2012, 16:39 7
C++
1
cin>>c[20];
этот код читает символ, в массиве мусор, который совсем не строка.
C++
1
char c[20];
очень плохо.
Лучше использовать string
0
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
30.03.2012, 16:47  [ТС] 8
Спасибо, но с другом уже разобрались =)
Оказывается проблемма была больше по кодировке, чем от
с[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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;
struct Poezda
{
     char Nomer[5];
     char StNazn[20];
     char TimeOtpr[20];
     char TimeVputi[20];
     char NalBilet[10];
};
void output ( Poezda a[], int n)
{
     cout<<"Номер|"<<setw(9)<<"Станция Назначения|"<<setw(9)<<"Время отправления|"<<setw(15)
            <<"Время в пути|"<<setw(7) <<"Наличие билетов|"<<endl;
     for(int i=0;i<n;i++)
     {
          cout<<"__________________________________________________________________________"<<endl;
          cout<<setw(2)<<a[i].Nomer<<"|"
              <<setw(19)<<a[i].StNazn<<"|"
              <<setw(17)<<a[i].TimeOtpr<<"|"
              <<setw(14)<<a[i].TimeVputi<<"|"
              <<setw(15)<<a[i].NalBilet<<"|";
          cout<<endl;
     }
}
void sort(Poezda a[],int n)
{
     Poezda min;
     int n_min;
     for(int i=0;i<n;i++)
     {
          min=a[i];n_min=i;
          for(int j=i;j<n;j++)
               if(strcmp(a[j].TimeOtpr,min.TimeOtpr)<0)
               {
                    min=a[j];
                    n_min=j;
               }
               a[n_min]=a[i];
            a[i]=min;
     }
}
int X(Poezda a[],Poezda b[],int n,char c[20])
{
     setlocale (LC_CTYPE, "Russian");
     int k=0;
     for(int i=0;i<n;i++)
     {
          if(strcmp(a[i].StNazn ,c)==0)  b[k++]=a[i];
     }
     return k;
}
int main()
{
    setlocale (LC_CTYPE, "Russian");
    Poezda t[10]={
        "126Э","Novorossiysk","00:25","30ч.","да",
        "244В","Yfa","10:50","10 ч. 13 мин.","нет",
        "232M","Novorossiysk","00:30","12 ч. 49 мин.","да",
        "356Й","Yfa","12:26","30 ч.","да",
        "252В","Capanck","01:20","10 ч. 18 мин.","нет",
        "030С","Novorossiysk","10:20","23 ч. 26 мин.","да",
        "104М","Yfa","08.20","27 ч.","да",
        "082И","Novorossiysk","13:10","88 ч.","да",
        "076Э","Capanck","13:10","116 ч.","нет",
        "076Э","Capanck","15:10","116 ч.","нет"
    };
    cout<<"input"<<endl<<endl<<endl;
    output(t,10);
    sort(t,10);
    cout<<endl<<endl<<"Out"<<endl<<endl<<endl;
    output(t,10);
    Poezda b[10];
    char c[20];
    cout<<endl<<"Введите станцию назначения"<<endl; cin>>c;
    int k=X(t,b,10,c);
    if(k!=0) output(b,k);
    else cout<<"!!!Нет совпадений!!!";
    cout<<endl;
    system("pause");
    }
0
go
Эксперт С++
3643 / 1375 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
30.03.2012, 16:52 9
ms.natali, что значит строку сравнить с символом?
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
30.03.2012, 16:59 10
Все равно код опасный
C++
1
2
    char c[20];
    cout<<endl<<"Введите станцию назначения"<<endl; cin>>c;
Если ввести 25 символов получится тот самый stack corruption.
0
MadridianFox
30.03.2012, 17:11 11
villu, правильно. Однако пока что никто не собирается вводить туда длинные строки и уж тем более пользоваться переполнением в корыстных целях))
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
31.03.2012, 23:28  [ТС] 12
Цитата Сообщение от go Посмотреть сообщение
ms.natali, что значит строку сравнить с символом?
Ну ечсть структура поезда. в ней строка станция назначения. и вот кажду эту строку надо сравнить с некой конечной станцие С. при совпадении тру, иначе фолс))

Добавлено через 56 секунд
Цитата Сообщение от villu Посмотреть сообщение
Если ввести 25 символов получится тот самый stack corruption.
А зачем вводить, если это студенческая лаба?)))
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
01.04.2012, 01:03 13
Цитата Сообщение от ms.natali Посмотреть сообщение
А зачем вводить, если это студенческая лаба?)))
есть мнение, что нужно делать все максимально корректно независимо от ситуации. Учиться проще, чем переучиваться.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2012, 01:03

Сравнение массивов типа Char
У меня есть структура. Мне нужно проверит, (sportsmens.Sport==&quot;swimming&quot;); sportsmens.Sport -...

Строки: почему компилятор пишет , что переменная типа char несовместима с const char?
char pass; int password( int d) { int m; char p; cout &lt;&lt; &quot;Введите пароль для доступа к...

проблема с переменной типа char
int count(char a){ int c=0; int words=0; while(a!='\0'){ if(a==' ')++words; } return words;...

Заполнение переменной типа char
Добрый вечер, Есть вот такой вот класс: class Road { private: char RoadName; public:


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

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

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