Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Altair42
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 351
1

Программа поиска

31.05.2014, 08:48. Просмотров 685. Ответов 29
Метки нет (Все метки)

Почему эта программа не работает? Не могу найти ошибку.
Первый раз цикл написал внутри другого цикла. Подумал из за этого типа исправил. Выложил оба скрина.
Скрин
Программа поиска


Программа поиска



Помогите понят в чем проблема. И как переписать эту программу используя switch. Выявил ошибку. Могу использовать char в место string. Но хочу знать почему не работает стринг.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2014, 08:48
Ответы с готовыми решениями:

Программа поиска данных
Вот задание :База данных гостиницы: Список гостей: паспортные данные, даты...

Программа для поиска файлов
нужна программа на c++ or php которая будет искать файл и загружать его на фтп,...

Программа поиска повторяющихся файлов
Добрый день! Уже пару дней пытаюсь написать программу, которая ищет...

Программа поиска простых чисел
Необходимо написать программу для поиска простых чесил в интервале от 1 до 100...

Программа поиска и копирования данных
Ребят, помааагите...:help: Через 3 дня наступит авраал.:rtfm: Зачет по С++]:->...

29
magirus
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
27957 / 15678 / 959
Регистрация: 15.09.2009
Сообщений: 67,825
Записей в блоге: 78
31.05.2014, 08:51 2
ты код лучше на форум выложи, и первоначальный, и якобы исправленный, почти год на форуме, а оформлять темы не научился...
0
Croessmah
++Ͻ
14776 / 8452 / 1605
Регистрация: 27.09.2012
Сообщений: 20,800
Записей в блоге: 2
Завершенные тесты: 1
31.05.2014, 08:53 3
C++
1
vChar[0] && text[j]
зачем там ноль?
И операция && зачем?

P.S. Сегодня бог картинок проснулся?
0
magirus
31.05.2014, 08:54
  #4

Не по теме:

Croessmah, шо, уже не первая подобная сегодня?

0
0x10
31.05.2014, 08:56
  #5

Не по теме:

Цитата Сообщение от magirus Посмотреть сообщение
Croessmah, шо, уже не первая подобная сегодня?
Ну) Ошибка в дочернем классе

0
Altair42
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 351
31.05.2014, 09:06  [ТС] 6
Первый.
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
nt main()
{
    setlocale(LC_ALL,"Russian");
    std::string text;
    std::vector<char> vChar;
    std::cout << " Введите текст. " << std::endl;
    std::getline(std::cin,text);
    char s;
    std::cout << " Введите 4 буквы которых надо найти в тексте " << std::endl;
    while(std::cin >> s)
        vChar.push_back(s);
    int numChr1, numChr2, numChr3, numChr4;
    numChr1 = numChr2 = numChr3 = numChr4 = 0;
    for(std::vector<char>::size_type i = 0; i < vChar.size(); i ++)
    {
        for(std::string::size_type j = 0; j < text.size(); j++)     
        {
        if(vChar[0] && text[j])
            ++numChr1;
        }
        }
        std::cout << "Число букв " << vChar[0] << " " << numChr1 << std::endl;
    
    
    
    _getch();
    return 0;
}
Исправленный.
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
nt main()
{
    setlocale(LC_ALL,"Russian");
    std::string text;
    std::vector<char> vChar;
    std::cout << " Введите текст. " << std::endl;
    std::getline(std::cin,text);
    char s;
    std::cout << " Введите 4 буквы которых надо найти в тексте " << std::endl;
    while(std::cin >> s)
        vChar.push_back(s);
    int numChr1, numChr2, numChr3, numChr4;
    numChr1 = numChr2 = numChr3 = numChr4 = 0;
    for(std::vector<char>::size_type i = 0; i < vChar.size(); i ++)
    
        for(std::string::size_type j = 0; j < text.size(); j++)     
        {
        if(vChar[0] && text[j])
            ++numChr1;
        
        }
        std::cout << "Число букв " << vChar[0] << " " << numChr1 << std::endl;
    
    
    
    _getch();
    return 0;
}
Коды не вложил потому что на скрине все видно.
 Комментарий модератора 
Вы обязаны выкладывать коды по правилам форума!

И кажется нашел решение проблемы с switch

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
зачем там ноль?
И операция && зачем?
Посмотрите код внимательней. Ноль чтоб проверит именно первую букву. Операция AND может и не правильный. раньше была == но не работало.
0
taras atavin
4205 / 1768 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
31.05.2014, 09:06 7
Цитата Сообщение от magirus Посмотреть сообщение
почти год на форуме, а оформлять темы не научился...
Он и писать не научился.
0
magirus
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
27957 / 15678 / 959
Регистрация: 15.09.2009
Сообщений: 67,825
Записей в блоге: 78
31.05.2014, 09:06 8
Цитата Сообщение от Altair42 Посмотреть сообщение
на скрине все видно.
ты ответ тоже в виде скрина предпочитаешь?
0
Altair42
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 351
31.05.2014, 09:08  [ТС] 9
Вот что выводит если использовать == в место &&
Программа поиска
0
Altair42
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 351
31.05.2014, 09:09  [ТС] 10
taras atavin, ха ха очень смешно!
0
Croessmah
++Ͻ
14776 / 8452 / 1605
Регистрация: 27.09.2012
Сообщений: 20,800
Записей в блоге: 2
Завершенные тесты: 1
31.05.2014, 09:12 11
Цитата Сообщение от Altair42 Посмотреть сообщение
Вот что выводит если использовать == в место &&
потому что 2 буквы есть, а в цикле
C++
1
for(std::vector<char>::size_type i = 0; i < vChar.size(); i ++)
4 прохода по строке. Вот и получается, что считает четыре раза по два символа
0
Altair42
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 351
31.05.2014, 09:14  [ТС] 12
Вопрос. Можно ли объявит символ константой после ввода с консоли?
0
0x10
2579 / 1758 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
31.05.2014, 09:18 13
Лови короткий вариант решения.
1
Миниатюры
Программа поиска  
Altair42
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 351
31.05.2014, 09:32  [ТС] 14
Цитата Сообщение от Croessmah Посмотреть сообщение
4 прохода по строке. Вот и получается, что считает четыре раза по два символа
Эмм. Если цикл в первом проходе находит все нужные символы то во втором проходе не должен видит их. По этому написал там vChar[0] чтоб другие элементы вектора не мешали.
C++
1
2
if(vChar[0] && text[j])
            ++numChr1;
после первого прохода vChar[1]. Оператор If пропустит этот шаг и ++numChr; не сработает.
Тут ошибка в том что оператор AND покажет все символы в первом проходе как нужные. Но там не 68 символов.

Переписал код
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
int main()
{
    setlocale(LC_ALL,"Russian");
    std::string text;
    std::vector<char> vChar;
    std::cout << " Введите текст. " << std::endl;
    std::getline(std::cin,text);
    char s;
    std::cout << " Введите 4 буквы которых надо найти в тексте " << std::endl;
    while(std::cin >> s)
        vChar.push_back(s);
    int numChr1, numChr2, numChr3, numChr4;
    numChr1 = numChr2 = numChr3 = numChr4 = 0;
    for(std::vector<char>::size_type i = 0; i < vChar.size(); i ++)
    
        for(std::string::size_type j = 0; j < text.size(); j++)     
        {
        if(vChar[0] == text[j])
            ++numChr1;
        
        }
        std::cout << "Число букв " << vChar[0] << " " << numChr1 << std::endl;
    
    
    
    _getch();
    return 0;
}
Тут видно что ++numChr1 увеличивается при каждом проходе. Но как это возможно если оператор if не срабатывает после первого прохода?

Добавлено через 3 минуты
0x10, я хочу ввести и текст и символы которых надо искать в тексте с консоли. Если уж сохранит и текст и символы в программе то без особых проблем можно написать код с помощи switch. И я не дошел до алгоритмов.
0
Croessmah
++Ͻ
14776 / 8452 / 1605
Регистрация: 27.09.2012
Сообщений: 20,800
Записей в блоге: 2
Завершенные тесты: 1
31.05.2014, 09:35 15
Цитата Сообщение от Altair42 Посмотреть сообщение
Тут ошибка в том что оператор AND покажет все символы в первом проходе как нужные. Но там не 68 символов.
Цитата Сообщение от Altair42 Посмотреть сообщение
Но как это возможно если оператор if не срабатывает после первого прохода?
Берете листочек с карандашом и пошагово проходите по всему алгоритму. Тогда поймете

P.S. 17 символов в строке, 4 прохода. условие vchar[0] && text[i] даст false если только наткнется на '\0'. Так что все символы будут давать true, вот и получаем 17 символом * на 4 прохода = 68
0
Altair42
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 351
31.05.2014, 09:37  [ТС] 16
Убрал первый цикл и все работает. Но все таки остается не решенный вопрос.
Почему при втором проходе цикла срабатывает оператор if? Вид там явно показано что if должен работать только с первым элементом вектора.
0
Croessmah
++Ͻ
14776 / 8452 / 1605
Регистрация: 27.09.2012
Сообщений: 20,800
Записей в блоге: 2
Завершенные тесты: 1
31.05.2014, 09:40 17
Цитата Сообщение от Altair42 Посмотреть сообщение
Вид там явно показано что if должен работать только с первым элементом вектора.
какие нафиг вектора... первые главы книги для чайников к прочтению
0
Altair42
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 351
31.05.2014, 09:47  [ТС] 18
Croessmah, Я это могу понят и без карандаша с бумагой.
Первый проход цикла:

-vChar[0] = q
-перешли в оператор if
-проверяем равенство vChar[0] == text[i] - true
-переходим на следующий шаг и добавляем +1 к numChr1

Второй проход цикла:
-vChar[1] = w
-переходим в оператор if
-проверяем равенство vChar[1] == text[i] -false в операторе If явно показано что проверяется именно vChar[0]
-пропускаем следующий шаг, так как оператор if получил значение fasle.
Возвращаемся в первый шаг цикла и проверяем vChar[j]
0
0x10
2579 / 1758 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
31.05.2014, 09:48 19
Цитата Сообщение от Altair42 Посмотреть сообщение
проверяем равенство vChar[1] == text[i]
В коде нет такой проверки.
0
Tulosba
31.05.2014, 09:48     Программа поиска
  #20

Не по теме:

0x10, откуда столько шумов?

0
31.05.2014, 09:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2014, 09:48
Привет! Вот еще темы с ответами:

Программа поиска по data файлу
Добрый день! Есть следующее задание: 1.создать дата файл (список) с...

Программа реализации алгоритмов поиска
Разработать программу, которая реализует методы поиска (бинарный и...

Программа для поиска файлов
Ребят хочу вылезти из типичных примеров в книгах и написать прогу для поиска...


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

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

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