Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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


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

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

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

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

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

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

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

29
magirus
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
27746 / 15653 / 943
Регистрация: 15.09.2009
Сообщений: 67,839
Записей в блоге: 78
31.05.2014, 08:51 #2
ты код лучше на форум выложи, и первоначальный, и якобы исправленный, почти год на форуме, а оформлять темы не научился...
0
Croessmah
Ушел
13775 / 8025 / 925
Регистрация: 27.09.2012
Сообщений: 19,768
Записей в блоге: 3
Завершенные тесты: 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
Сообщений: 349
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
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
31.05.2014, 09:06 #7
Цитата Сообщение от magirus Посмотреть сообщение
почти год на форуме, а оформлять темы не научился...
Он и писать не научился.
0
magirus
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
27746 / 15653 / 943
Регистрация: 15.09.2009
Сообщений: 67,839
Записей в блоге: 78
31.05.2014, 09:06 #8
Цитата Сообщение от Altair42 Посмотреть сообщение
на скрине все видно.
ты ответ тоже в виде скрина предпочитаешь?
0
Altair42
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 349
31.05.2014, 09:08  [ТС] #9
Вот что выводит если использовать == в место &&
Программа поиска
0
Altair42
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 349
31.05.2014, 09:09  [ТС] #10
taras atavin, ха ха очень смешно!
0
Croessmah
Ушел
13775 / 8025 / 925
Регистрация: 27.09.2012
Сообщений: 19,768
Записей в блоге: 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 прохода по строке. Вот и получается, что считает четыре раза по два символа
0
Altair42
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 349
31.05.2014, 09:14  [ТС] #12
Вопрос. Можно ли объявит символ константой после ввода с консоли?
0
0x10
2549 / 1729 / 264
Регистрация: 24.11.2012
Сообщений: 4,351
31.05.2014, 09:18 #13
Лови короткий вариант решения.
1
Миниатюры
Программа поиска  
Altair42
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 349
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
Ушел
13775 / 8025 / 925
Регистрация: 27.09.2012
Сообщений: 19,768
Записей в блоге: 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
0
31.05.2014, 09:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2014, 09:35
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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