Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/50: Рейтинг темы: голосов - 50, средняя оценка - 4.72
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14

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

30.03.2012, 15:17. Показов 10216. Ответов 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;
}


Вот текст задания

и 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2012, 15:17
Ответы с готовыми решениями:

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

Сравнение типа char
есть функция, которая получает значение класса, и сравнивает его с вводимым пользователем значением: void Library::find_book(){ char...

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

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

Добавлено через 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
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
30.03.2012, 15:46
Цитата Сообщение от ms.natali Посмотреть сообщение
Я так уже делала.
Может быть там лишний символ перевода строки в конце.
Попробуйте заменить на
C++
1
    if(strncmp(a[].StNazn ,c,strlen(c)-1)==0)  b[k++]=a[i];
0
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
30.03.2012, 16:03  [ТС]
Нет. это тоже не работает. Возвращает 0. Меня больше волнует тот факт, что после того как программа вывела"нажмите клавишу для продолжения..." и я нажала эту клавишу вылезает окошко
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
30.03.2012, 16:39
C++
1
cin>>c[20];
этот код читает символ, в массиве мусор, который совсем не строка.
C++
1
char c[20];
очень плохо.
Лучше использовать string
0
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
30.03.2012, 16:47  [ТС]
Спасибо, но с другом уже разобрались =)
Оказывается проблемма была больше по кодировке, чем от
с[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
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
30.03.2012, 16:52
ms.natali, что значит строку сравнить с символом?
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
30.03.2012, 16:59
Все равно код опасный
C++
1
2
    char c[20];
    cout<<endl<<"Введите станцию назначения"<<endl; cin>>c;
Если ввести 25 символов получится тот самый stack corruption.
0
MadridianFox
30.03.2012, 17:11
villu, правильно. Однако пока что никто не собирается вводить туда длинные строки и уж тем более пользоваться переполнением в корыстных целях))
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
31.03.2012, 23:28  [ТС]
Цитата Сообщение от go Посмотреть сообщение
ms.natali, что значит строку сравнить с символом?
Ну ечсть структура поезда. в ней строка станция назначения. и вот кажду эту строку надо сравнить с некой конечной станцие С. при совпадении тру, иначе фолс))

Добавлено через 56 секунд
Цитата Сообщение от villu Посмотреть сообщение
Если ввести 25 символов получится тот самый stack corruption.
А зачем вводить, если это студенческая лаба?)))
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
01.04.2012, 01:03
Цитата Сообщение от ms.natali Посмотреть сообщение
А зачем вводить, если это студенческая лаба?)))
есть мнение, что нужно делать все максимально корректно независимо от ситуации. Учиться проще, чем переучиваться.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2012, 01:03
Помогаю со студенческими работами здесь

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

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

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

проблема с переменной типа 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru