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

Сравнение и вывод слов - C++

Восстановить пароль Регистрация
 
Derik117
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 22
05.10.2013, 10:26     Сравнение и вывод слов #1
Всем доброго времени суток. Хочу попросить помощи. Моя задача - составить программу, которая бы при вводе фамилии выдавала некие данные студента(база формируется самостоятельно через массив структур). Все сделал, но при выводе символьных данных пишется только первая буква, также, я подозреваю, что сравнение строк происходит некорректно. Может кто помочь разобраться?
Код
   #include <iostream.h>
   using namespace std; 
   struct student
   {
      char f_name;
      char l_name;
      char address;
      int rating;
      char www;
   };

   int show_student(int x)
   {
      student bi22[4];
      cout << "Имя: " << bi22[x].f_name << endl;
      cout << "Фамилия: " << bi22[x].l_name << endl;
      cout << "Адрес: " << bi22[x].address << endl;
      cout << "Рейтинг: " << bi22[x].rating << endl;
      cout << "Ссылка: " << bi22[x].www << endl;
   }

   int main()
   {
       setlocale(LC_ALL,"Russian");
       student bi22[4];
       
   bi22[0].f_name =* "ЦЦЦ";
   bi22[0].l_name =* "УУУ";
   bi22[0].address =* "г.Москва";
   bi22[0].rating = 67;
   bi22[0].www =* "r.yandex.ru";
   
   bi22[1].f_name =* "ЯЯЯ";
   bi22[1].l_name =* "МММ";
   bi22[1].address =* "г.Москва";
   bi22[1].rating = 82;
   bi22[1].www =* "a.yandex.ru";
   
   bi22[2].f_name =* "ВВВ";
   bi22[2].l_name =* "ААА";
   bi22[2].address =* "г.Москва";
   bi22[2].rating = 99;
   bi22[2].www =* "b.yandex.ru";
   
   bi22[3].f_name =* "ФФФ";
   bi22[3].l_name =* "ЙЙЙ";
   bi22[3].address =* "г.Москва";
   bi22[3].rating = 71;
   bi22[3].www = 'c.yandex.ru';
       
       int x=4;
       char y;
       cout<<"Фамилия студента: ";
       cin>>y;
       if (y=bi22[0].l_name) x==0;
       if (y=bi22[1].l_name) x==1;
       if (y=bi22[2].l_name) x==2;
       if (y=bi22[3].l_name) x==3;
       if (x=4) cout<<"Такого студента в базе нет";
      
      show_student (x);
      system("pause");
      return 0;
   }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2013, 10:26     Сравнение и вывод слов
Посмотрите здесь:

C++ сравнение слов...
C++ Сравнение двух слов
Вывод на экран чётных слов строки исправить на вывод нечётных слов C++
C++ Сравнение русских слов
C++ Алфавит и сравнение слов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
05.10.2013, 10:39     Сравнение и вывод слов #2
char f_name; - это не строка, а один символ. хотите хранить строки - используйте
std::string.
т.е.
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
#include <string>
#include <vector>
 
struct student
{
  std::string f_name;
  std::string l_name;
  std::string address;
  std::string rating;
  std::string www;
 };
 
....
 
//для них определен оператор ==. поэтому можно писать так:
 
student st;
 
if (st.f_name == "xyz")
{
  ....
}
 
//их можно вводить из потока:
cin << st.f_name; // до первого пробела.
//или так:
std::getline(std::cin, st.f_name); // до ввода вся строка до ентера
 
 
//для массива структур используйте std::vector:
 
std::vector<student> studentsArray;
 
student tmpSt;
std::getline(std::cin, tmpSt.f_name);
...
studentsArray.push_back(tmpSt);
 
for (std::size_t i = 0; i < studentsArray.size(); ++i)
{
   // печать студента или еще что-то
}
Derik117
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 22
05.10.2013, 11:02  [ТС]     Сравнение и вывод слов #3
DU, попробовал использовать std::string, с выводом разобрался. А со сравнением не получается, не хочет он сравнивать никак.
Код
       int x=4;
       std::string y;
       cout<<"Фамилия: ";
       cin>>y;
       if (y == "ААА") x==0;
       if (y == "БББ") x==1;
       if (y == "ВВВ") x==2;
       if (y == "ДДД") x==3;
После этого x так и остается равен 4. В чем ошибка?
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.10.2013, 11:45     Сравнение и вывод слов #4
Derik117, попробуйте ввод и сравнение английский слов. Вероятно дело в кодировке.
Derik117
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 22
05.10.2013, 13:06  [ТС]     Сравнение и вывод слов #5
Цитата Сообщение от Tulosba Посмотреть сообщение
Derik117, попробуйте ввод и сравнение английский слов. Вероятно дело в кодировке.
Попробовал. Не сравнивается все равно.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
05.10.2013, 13:09     Сравнение и вывод слов #6
плохо пробовали.
если не умеете дебагер юзать, то посимвольно выведете коды (преобразуйте в целое число) символов в консоль одной и второй строки. скорее всего они отличаются.
Derik117
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 22
05.10.2013, 13:12  [ТС]     Сравнение и вывод слов #7
Цитата Сообщение от DU Посмотреть сообщение
плохо пробовали.
если не умеете дебагер юзать, то посимвольно выведете коды (преобразуйте в целое число) символов в консоль одной и второй строки. скорее всего они отличаются.
Сделал так, ввожу RYZ, и x все равно не меняет своего значения.
Код
       std::string y;
       cout<<"Фамилия: ";
       cin>>y;
       if (y == "RYZ") x==0;
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.10.2013, 15:19     Сравнение и вывод слов #8
Цитата Сообщение от Derik117 Посмотреть сообщение
и x все равно не меняет своего значения.
Цитата Сообщение от Derik117 Посмотреть сообщение
x==0;
Так надо присваивать, а не сравнивать "икс" с нулем.
C++
1
if (y == "RYZ") x=0;
Derik117
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 22
05.10.2013, 21:51  [ТС]     Сравнение и вывод слов #9
Со сравнением разобрался, в одной из строчек по невнимательности поставил приравнять, а не сравнить.
Теперь другая проблема, функция вроде написана правильно, но не хочет работать. Может кто подсказать, пожалуйста?
C++ (Qt)
1
2
3
4
5
6
7
8
9
   int show_student(int x)
   {
      student bi22[4];
      cout << "Имя: " << bi22[x].f_name << endl;
      cout << "Фамилия: " << bi22[x].l_name << endl;
      cout << "Адрес: " << bi22[x].address << endl;
      cout << "Рейтинг: " << bi22[x].rating << endl;
      cout << "Ссылка: " << bi22[x].www << endl;
   }
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.10.2013, 21:57     Сравнение и вывод слов #10
Цитата Сообщение от Derik117 Посмотреть сообщение
функция вроде написана правильно, но не хочет работать.
Вы создаете локальный массив bi22 совсем никак не инициализированный (т.е. там пустые строки) и выводите его. Что Вы хотите увидеть таким образом?
Derik117
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 22
05.10.2013, 21:59  [ТС]     Сравнение и вывод слов #11
Цитата Сообщение от Tulosba Посмотреть сообщение
Вы создаете локальный массив bi22 совсем никак не инициализированный (т.е. там пустые строки) и выводите его. Что Вы хотите увидеть таким образом?
А как тогда использовать массив структур внутри функции, если задается он в самой программе? Точнее, как правильно к нему обратиться?
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.10.2013, 22:04     Сравнение и вывод слов #12
Цитата Сообщение от Derik117 Посмотреть сообщение
если задается он в самой программе?
Странная формулировка. Что значит задается в самой программе? Если он объявлен глобально, то просто так к нему и обращайтесь по имени.
Derik117
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 22
05.10.2013, 22:07  [ТС]     Сравнение и вывод слов #13
Цитата Сообщение от Tulosba Посмотреть сообщение
Странная формулировка. Что значит задается в самой программе? Если он объявлен глобально, то просто так к нему и обращайтесь по имени.
Имел ввиду, что массив структур задается в главной функции(вроде так называется, int main). И в ней же идет обращение к моей функции show_student, которая задана до int main.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.10.2013, 22:18     Сравнение и вывод слов #14
значит надо передавать в параметрах:
C++
1
2
3
4
int show_student(student* s, int x)
{
   cout << "Имя: " << s[x].f_name << endl;
...}
Derik117
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 22
05.10.2013, 23:02  [ТС]     Сравнение и вывод слов #15
Цитата Сообщение от Tulosba Посмотреть сообщение
значит надо передавать в параметрах:
C++
1
2
3
4
int show_student(student* s, int x)
{
   cout << "Имя: " << s[x].f_name << endl;
...}
Дико извиняюсь, но как вызывать функцию тогда?
C++ (Qt)
1
show_student (student bi22 , x);
Выдает ошибку.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.10.2013, 23:05     Сравнение и вывод слов #16
Вызывать
C++
1
show_student ( bi22 , x);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2013, 23:13     Сравнение и вывод слов
Еще ссылки по теме:

C++ STL: Сортировка слов по количеству согласных букв; вывод слов, встречающихся в списке более одного раза
Сравнение слов C++
C++ Сравнение русских слов

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

Или воспользуйтесь поиском по форуму:
Derik117
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 22
05.10.2013, 23:13  [ТС]     Сравнение и вывод слов #17
Цитата Сообщение от Tulosba Посмотреть сообщение
Вызывать
C++
1
show_student ( bi22 , x);
Большое спасибо! Все получилось.
Yandex
Объявления
05.10.2013, 23:13     Сравнение и вывод слов
Ответ Создать тему
Опции темы

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