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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 324
#1

Программа поиска - C++

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

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

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


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

Программа поиска данных - C++
Вот задание :База данных гостиницы: Список гостей: паспортные данные, даты приезда и отъезда, номер, тип размещения (люкс, одноместный,...

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

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

Программа поиска по data файлу - C++
Добрый день! Есть следующее задание: 1.создать дата файл (список) с информацией включающий 4-6 тегов, с возможностью добавления...

Программа поиска простых чисел - C++
Необходимо написать программу для поиска простых чесил в интервале от 1 до 100 на языке СИ.Простое число — это натуральное число, имеющее...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
magirus
Супер-модератор
Эксперт по компьютерным сетямЭксперт Windows
26316 / 14618 / 820
Регистрация: 15.09.2009
Сообщений: 63,330
Записей в блоге: 68
31.05.2014, 08:51     Программа поиска #2
ты код лучше на форум выложи, и первоначальный, и якобы исправленный, почти год на форуме, а оформлять темы не научился...
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
31.05.2014, 08:53     Программа поиска #3
C++
1
vChar[0] && text[j]
зачем там ноль?
И операция && зачем?

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

Не по теме:

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

0x10
31.05.2014, 08:56
  #5

Не по теме:

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

Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 324
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 может и не правильный. раньше была == но не работало.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.05.2014, 09:06     Программа поиска #7
Цитата Сообщение от magirus Посмотреть сообщение
почти год на форуме, а оформлять темы не научился...
Он и писать не научился.
magirus
Супер-модератор
Эксперт по компьютерным сетямЭксперт Windows
26316 / 14618 / 820
Регистрация: 15.09.2009
Сообщений: 63,330
Записей в блоге: 68
31.05.2014, 09:06     Программа поиска #8
Цитата Сообщение от Altair42 Посмотреть сообщение
на скрине все видно.
ты ответ тоже в виде скрина предпочитаешь?
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 324
31.05.2014, 09:08  [ТС]     Программа поиска #9
Вот что выводит если использовать == в место &&
Программа поиска
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 324
31.05.2014, 09:09  [ТС]     Программа поиска #10
taras atavin, ха ха очень смешно!
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
31.05.2014, 09:12     Программа поиска #11
Цитата Сообщение от Altair42 Посмотреть сообщение
Вот что выводит если использовать == в место &&
потому что 2 буквы есть, а в цикле
C++
1
for(std::vector<char>::size_type i = 0; i < vChar.size(); i ++)
4 прохода по строке. Вот и получается, что считает четыре раза по два символа
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 324
31.05.2014, 09:14  [ТС]     Программа поиска #12
Вопрос. Можно ли объявит символ константой после ввода с консоли?
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
31.05.2014, 09:18     Программа поиска #13
Лови короткий вариант решения.
Миниатюры
Программа поиска  
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 324
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. И я не дошел до алгоритмов.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 324
31.05.2014, 09:37  [ТС]     Программа поиска #16
Убрал первый цикл и все работает. Но все таки остается не решенный вопрос.
Почему при втором проходе цикла срабатывает оператор if? Вид там явно показано что if должен работать только с первым элементом вектора.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
31.05.2014, 09:40     Программа поиска #17
Цитата Сообщение от Altair42 Посмотреть сообщение
Вид там явно показано что if должен работать только с первым элементом вектора.
какие нафиг вектора... первые главы книги для чайников к прочтению
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 324
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]
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
31.05.2014, 09:48     Программа поиска #19
Цитата Сообщение от Altair42 Посмотреть сообщение
проверяем равенство vChar[1] == text[i]
В коде нет такой проверки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2014, 09:48     Программа поиска
Еще ссылки по теме:

Программа поиска слова и его замены на с/с++ - C++
Здравствуйте, дорогие форумчане.:) Мне необходимо реализовать программу для считывания строки из первого файла, считывание заменяемого...

Программа для поиска седловой точки С++ - C++
Элемент матрицы называется седловой точкой, если он является одновременно наименьшим в своей строке и наибольшим в своем столбце. Дана...

Программа для поиска минимального значения функции - C++
Всем привет! Помогите разобраться и найти ошибку в коде программы. В задачу входило скомпилировать программу на С++, которая ищет...

Программа поиска минимального элемента. В чем ошибка? - C++
Прога должна найти минимальный элемент в двухмерном массиве. Почему то не работает, где ошибка? #include &lt;iostream&gt; #include...

Нужна программа для поиска слова в тексте. с++ - C++
ЛЮди, помогите. Нужно написать программу, которая производит поиск введенного пользователем слова в тексте. Текст берется из файла....


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

Или воспользуйтесь поиском по форуму:
Tulosba
31.05.2014, 09:48     Программа поиска
  #20

Не по теме:

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

Yandex
Объявления
31.05.2014, 09:48     Программа поиска
Ответ Создать тему
Опции темы

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