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

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

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

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


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



Помогите понят в чем проблема. И как переписать эту программу используя switch. Выявил ошибку. Могу использовать char в место string. Но хочу знать почему не работает стринг.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2014, 08:48
Ответы с готовыми решениями:

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

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

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

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

29
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
28023 / 15750 / 971
Регистрация: 15.09.2009
Сообщений: 67,775
Записей в блоге: 78
31.05.2014, 08:51 2
ты код лучше на форум выложи, и первоначальный, и якобы исправленный, почти год на форуме, а оформлять темы не научился...
0
Don't worry, be happy
16989 / 9868 / 1900
Регистрация: 27.09.2012
Сообщений: 24,472
Записей в блоге: 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
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
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
4198 / 1790 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
31.05.2014, 09:06 7
Цитата Сообщение от magirus Посмотреть сообщение
почти год на форуме, а оформлять темы не научился...
Он и писать не научился.
0
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
28023 / 15750 / 971
Регистрация: 15.09.2009
Сообщений: 67,775
Записей в блоге: 78
31.05.2014, 09:06 8
Цитата Сообщение от Altair42 Посмотреть сообщение
на скрине все видно.
ты ответ тоже в виде скрина предпочитаешь?
0
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
31.05.2014, 09:08  [ТС] 9
Вот что выводит если использовать == в место &&
Программа поиска
0
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
31.05.2014, 09:09  [ТС] 10
taras atavin, ха ха очень смешно!
0
Don't worry, be happy
16989 / 9868 / 1900
Регистрация: 27.09.2012
Сообщений: 24,472
Записей в блоге: 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
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
31.05.2014, 09:14  [ТС] 12
Вопрос. Можно ли объявит символ константой после ввода с консоли?
0
3240 / 2043 / 350
Регистрация: 24.11.2012
Сообщений: 4,898
31.05.2014, 09:18 13
Лови короткий вариант решения.
1
Миниатюры
Программа поиска  
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
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
Don't worry, be happy
16989 / 9868 / 1900
Регистрация: 27.09.2012
Сообщений: 24,472
Записей в блоге: 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
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
31.05.2014, 09:37  [ТС] 16
Убрал первый цикл и все работает. Но все таки остается не решенный вопрос.
Почему при втором проходе цикла срабатывает оператор if? Вид там явно показано что if должен работать только с первым элементом вектора.
0
Don't worry, be happy
16989 / 9868 / 1900
Регистрация: 27.09.2012
Сообщений: 24,472
Записей в блоге: 1
31.05.2014, 09:40 17
Цитата Сообщение от Altair42 Посмотреть сообщение
Вид там явно показано что if должен работать только с первым элементом вектора.
какие нафиг вектора... первые главы книги для чайников к прочтению
0
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
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
3240 / 2043 / 350
Регистрация: 24.11.2012
Сообщений: 4,898
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.создать дата файл (список) с информацией включающий 4-6...

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

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


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

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

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