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

Не Ищет фамилию - C++

Восстановить пароль Регистрация
 
ra4ok
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 37
24.10.2012, 22:40     Не Ищет фамилию #1
Добрый вечер. Нашел код, но он не ищет фамилию, всегда выдает фимилия не найдена, помоги плиз. Код полностью работает, кроме поиска фамилии.
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include "iostream"
#include "time.h"
#include "conio.h"
 
using namespace std;
 
struct ZNAK
{
    char family[15];
    char name[15];
    char znak[11];
    int date[3];
};
 
bool chars(char* char1, char* char2, char* char3, char* char4)
{
    int count = 0;
    int sovpad = 0;
    while (char1[count] != '\0')
    {
        if (char1[count] == char2[count])        
            ++sovpad;        
        ++count;
    }
        while (char3[count] != '\0')
    {
        if (char3[count] == char4[count])        
            ++sovpad;        
        ++count;
    }
 
    if (count == sovpad)
        return true;
 
    return false;
}
 
void Search(ZNAK *pZNAK, char* family, char* name, int n)
{
    bool ok = false;
    for (int i = 0; i < n; ++i)
    {        
        if (chars(pZNAK[i].family, family, pZNAK[i].name, name))
        {
            cout << "Family: " << pZNAK[i].family << endl;
            cout << "name: " << pZNAK[i].name << endl;
            cout << "ZNAK: " << pZNAK[i].znak << endl;
            cout << "Date: " << pZNAK[i].date[0] << ":" << pZNAK[i].date[1]    << ":" << pZNAK[i].date[2] << endl;
            ok = true;
        }
    }
    if (!ok)
        cout << "Family ne naydena!!!!" << endl;    
}
void Sort(ZNAK *pZNAK, int n)
{
    // A - 65
    // z - 122
    ZNAK f;
    for (int i = 0; i < n - 1; ++i)
    {
        for (int j = i; j < n; ++j)
        {
            bool h = true;
            int q = 0;    
            while (h == true && q < 16)
            {
                if (pZNAK[j].family[q] < pZNAK[i].family[q])
                {
                    h=false;
                    f = pZNAK[i];
                    pZNAK[i] = pZNAK[j];
                    pZNAK[j] = f;                
                }
                else if (pZNAK[j].family[q] > pZNAK[i].family[q])
                    h = false;            
                    
                ++q;
            }
        }
    }
}
 
int main()
{
    int n;
    ZNAK pZNAK[10];
    cout << "Vvedite N (n <= 10): ";
    cin >> n;
    if (n > 10)
    {
        cout << "Error: N" << endl;    
        return 0;
    }
    for (int i = 0; i < n; ++i)
    {                
        cout << "Number " << i << endl;
        cout << "Vvedite Family -> ";
        cin >> pZNAK[i].family;
        cout << "Vvedite name -> ";
        cin >> pZNAK[i].name;
        cout << "Vvedite Znak -> ";
        cin >> pZNAK[i].znak;
        cout << "Vvedite date[format: den', mesyac, god] -> ";
        cin >> pZNAK[i].date[0] >> pZNAK[i].date[1] >> pZNAK[i].date[2];
    }
    char family[15];
    char name[15]; 
    cout << "Vvedite family dly poiska: ";
    cin >> family;
    cout << "<<<<<SEARCH RESULT>>>>>" << endl;
    Search(&pZNAK[0], &family[0], &name[0], n);
    Sort(&pZNAK[0], n);
    cout << "<<<<<SORT RESULT>>>>>" << endl;
    for ( i = 0; i < n; ++i)
    {
         cout << "Family: " << pZNAK[i].family << endl;
         cout << "ZNAK: " << pZNAK[i].znak << endl;
         cout << "Date: " << pZNAK[i].date[0] << ":" << pZNAK[i].date[1]    << ":" << pZNAK[i].date[2] << endl;    
         cout << "________________________________________________" << endl;
    }    
    getch();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
24.10.2012, 23:57     Не Ищет фамилию #2
Цитата Сообщение от ra4ok Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int count = 0;
 int sovpad = 0;
 while (char1[count] != '\0')
 {
 if (char1[count] == char2[count]) 
 ++sovpad; 
 ++count;
 }
 while (char3[count] != '\0')
 {
 if (char3[count] == char4[count]) 
 ++sovpad; 
 ++count;
 }
Помедитируйте над этим куском кода, и ответьте себе, что будет находится в char3[count] и char4[count] в момент начала цикла и во время его исполнения.
ra4ok
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 37
25.10.2012, 01:24  [ТС]     Не Ищет фамилию #3
Цитата Сообщение от kazak Посмотреть сообщение
Помедитируйте над этим куском кода, и ответьте себе, что будет находится в char3[count] и char4[count] в момент начала цикла и во время его исполнения.
Моя медитация мне ничем не поможет, я уже 8 лаб сделал... Голова трещит, а еще физику делать...
если можете выручите плиз

Добавлено через 1 час 3 минуты
Цитата Сообщение от kazak Посмотреть сообщение
Помедитируйте над этим куском кода, и ответьте себе, что будет находится в char3[count] и char4[count] в момент начала цикла и во время его исполнения.
В начале char3[count] Начнет считывать символы 1 за другим пока не дойдет до конца, при исполнение цикла он будет сравниваться с с char4[count], если совпадет то ок нет?

Добавлено через 1 минуту
Но если я не ошибаюсь char3[count] и char4[count] ни с чем в программе не связано?!?!
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.10.2012, 06:47     Не Ищет фамилию #4
Цитата Сообщение от ra4ok Посмотреть сообщение
Но если я не ошибаюсь char3[count] и char4[count] ни с чем в программе не связано?!?!
Они используют для индексации отдельных букв строки count, нетрудно догадаться, что значение count должно меняться от 0 до значения равного длине строки записанной в массив. Но у Вас в программе на момент начала второго цикла в count будет содержаться длина первого массива с фамилией, и соовтетственно сравнение 3 и 4 массивов начнется не спервого элемента.
ra4ok
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 37
25.10.2012, 18:54  [ТС]     Не Ищет фамилию #5
Цитата Сообщение от kazak Посмотреть сообщение
Они используют для индексации отдельных букв строки count, нетрудно догадаться, что значение count должно меняться от 0 до значения равного длине строки записанной в массив. Но у Вас в программе на момент начала второго цикла в count будет содержаться длина первого массива с фамилией, и соовтетственно сравнение 3 и 4 массивов начнется не спервого элемента.
Я попробовал вместо char3[count] и char4[count] написать, что либо другое в и конце цикла дописать условие, он это не помогло

Добавлено через 8 часов 11 минут
Может кто помочь?
byi_ja
7 / 7 / 0
Регистрация: 16.05.2012
Сообщений: 31
25.10.2012, 19:52     Не Ищет фамилию #6
попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool chars(char* char1, char* char2, char* char3, char* char4)
{
    int count = 0;
    int sovpad = 0;
    while (char1[count] != '\0')
    {
        if (char1[count] == char2[sovpad])        
            ++sovpad;        
        ++count;
    }
      
        if (char3[count] == char4[count])        
           
    if (count == sovpad)
        return true
        else  return false;
}
Добавлено через 11 минут
сори за предыдущий

попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
bool chars(char* char1, char* char2, char* char3, char* char4)
{
    for(int count=0;count<strlen(char1);count++)            
        if (char1[count] != char2[count]) return false;     //проверяет фамилию.
    
    for(int count=0;count<strlen(char1);count++)    
    if (char3[count] != char4[count]) return false;   //проверяет имя.
 
 
   return true;
}
ra4ok
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 37
25.10.2012, 20:03  [ТС]     Не Ищет фамилию #7
Цитата Сообщение от byi_ja Посмотреть сообщение
попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool chars(char* char1, char* char2, char* char3, char* char4)
{
    int count = 0;
    int sovpad = 0;
    while (char1[count] != '\0')
    {
        if (char1[count] == char2[sovpad])        
            ++sovpad;        
        ++count;
    }
      
        if (char3[count] == char4[count])        
           
    if (count == sovpad)
        return true
        else  return false;
}
Добавлено через 11 минут
сори за предыдущий

попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
bool chars(char* char1, char* char2, char* char3, char* char4)
{
    for(int count=0;count<strlen(char1);count++)            
        if (char1[count] != char2[count]) return false;     //проверяет фамилию.
    
    for(int count=0;count<strlen(char1);count++)    
    if (char3[count] != char4[count]) return false;   //проверяет имя.
 
 
   return true;
}
не помогло, попробовал поиск по имени тож не сработало.
byi_ja
7 / 7 / 0
Регистрация: 16.05.2012
Сообщений: 31
25.10.2012, 20:26     Не Ищет фамилию #8
Debug-ом проверь заходит ли программа в эту процедуру
Цитата Сообщение от ra4ok Посмотреть сообщение
bool chars(char* char1, char* char2, char* char3, char* char4)
{
* * for(int count=0;count<strlen(char1);count++)* * * * * *
* * * * if (char1[count] != char2[count]) return false; * * //проверяет фамилию.
for(int count=0;count<strlen(char1);count++)* *
* * if (char3[count] != char4[count]) return false; * //проверяет имя.
return true;
}
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.10.2012, 20:29     Не Ищет фамилию #9
Цитата Сообщение от ra4ok Посмотреть сообщение
C++
1
2
3
4
5
6
char family[15];
 char name[15]; 
 cout << "Vvedite family dly poiska: ";
 cin >> family;
 cout << "<<<<<SEARCH RESULT>>>>>" << endl;
 Search(&pZNAK[0], &family[0], &name[0], n);
А массив name кто заполнять будет?
byi_ja
7 / 7 / 0
Регистрация: 16.05.2012
Сообщений: 31
25.10.2012, 20:32     Не Ищет фамилию #10
так вот он заполняется
C++
1
2
3
4
5
6
7
8
9
10
11
12
 for (int i = 0; i < n; ++i)
    {                
        cout << "Number " << i << endl;
        cout << "Vvedite Family -> ";
        cin >> pZNAK[i].family;
        cout << "Vvedite name -> ";
        cin >> pZNAK[i].name;
        cout << "Vvedite Znak -> ";
        cin >> pZNAK[i].znak;
        cout << "Vvedite date[format: den', mesyac, god] -> ";
        cin >> pZNAK[i].date[0] >> pZNAK[i].date[1] >> pZNAK[i].date[2];
    }
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.10.2012, 20:38     Не Ищет фамилию #11
Цитата Сообщение от byi_ja Посмотреть сообщение
так вот он заполняется
Вы таки разберите код в цитате, которую я привел.
byi_ja
7 / 7 / 0
Регистрация: 16.05.2012
Сообщений: 31
25.10.2012, 20:40     Не Ищет фамилию #12
sorry vtuk prosto kliynyl na MASIv i podymal...
ra4ok
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 37
25.10.2012, 21:24  [ТС]     Не Ищет фамилию #13
Дак что мне нужно изменить?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.10.2012, 21:27     Не Ищет фамилию #14
Либо в функции поиска удалить сравнение имен вообще, либо после ввода фамилии, предложить ввести имя, очевидно же

Добавлено через 37 секунд
Цитата Сообщение от kazak Посмотреть сообщение
либо после ввода фамилии, предложить ввести имя
Это тут
Цитата Сообщение от ra4ok Посмотреть сообщение
char family[15];
char name[15];
cout << "Vvedite family dly poiska: ";
cin >> family;
ra4ok
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 37
25.10.2012, 21:48  [ТС]     Не Ищет фамилию #15
Цитата Сообщение от kazak Посмотреть сообщение
Либо в функции поиска удалить сравнение имен вообще, либо после ввода фамилии, предложить ввести имя, очевидно же

Добавлено через 37 секунд

Это тут
я не могу сделать ввод сразу после объявления.
Вот условие, структуру я должен оформить в виде функции... Потому ввод не возможен там.
Миниатюры
Не Ищет фамилию  
byi_ja
7 / 7 / 0
Регистрация: 16.05.2012
Сообщений: 31
25.10.2012, 21:58     Не Ищет фамилию #16
тогда проверку имени ненадо
станет так
C++
1
2
3
4
5
6
bool chars(char* char1, char* char2)
{
    for(int count=0;count<strlen(char1);count++)            
        if (char1[count] != char2[count]) return false;     //проверяет фамилию.
    return true;
}
we2seek
 Аватар для we2seek
56 / 56 / 12
Регистрация: 25.01.2010
Сообщений: 289
26.10.2012, 01:09     Не Ищет фамилию #17
Попробуйте использовать функцию strstr(char* string1, char *string2)

C++
1
2
3
4
if ( strstr(mv->Name, SearchKey) ) 
{
   ...
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2012, 07:02     Не Ищет фамилию
Еще ссылки по теме:

*char (запрашивает ввести фамилию) C++
Сортировать фамилию и возраст C++
Дописать в выбранный файл фамилию C++

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

Или воспользуйтесь поиском по форуму:
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.10.2012, 07:02     Не Ищет фамилию #18
Цитата Сообщение от we2seek Посмотреть сообщение
Попробуйте использовать функцию strstr
Эта функция ищет подсктроку в строке, допустим "Иванов" является подстрокой в "Ивановский", но в контексте задачи это две разные фамилии. Если уж использовать стандартные функции, тогда уже strcmp.
Yandex
Объявления
26.10.2012, 07:02     Не Ищет фамилию
Ответ Создать тему
Опции темы

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