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

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

Восстановить пароль Регистрация
 
 
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
31.05.2014, 08:48     Программа поиска #1
Почему эта программа не работает? Не могу найти ошибку.
Первый раз цикл написал внутри другого цикла. Подумал из за этого типа исправил. Выложил оба скрина.
Скрин
Программа поиска

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


Помогите понят в чем проблема. И как переписать эту программу используя switch. Выявил ошибку. Могу использовать char в место string. Но хочу знать почему не работает стринг.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
magirus
Супер-модератор
 Аватар для magirus
25482 / 14023 / 741
Регистрация: 15.09.2009
Сообщений: 59,710
Записей в блоге: 61
31.05.2014, 08:51     Программа поиска #2
ты код лучше на форум выложи, и первоначальный, и якобы исправленный, почти год на форуме, а оформлять темы не научился...
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,868
Записей в блоге: 2
Завершенные тесты: 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
Сообщений: 322
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
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.05.2014, 09:06     Программа поиска #7
Цитата Сообщение от magirus Посмотреть сообщение
почти год на форуме, а оформлять темы не научился...
Он и писать не научился.
magirus
Супер-модератор
 Аватар для magirus
25482 / 14023 / 741
Регистрация: 15.09.2009
Сообщений: 59,710
Записей в блоге: 61
31.05.2014, 09:06     Программа поиска #8
Цитата Сообщение от Altair42 Посмотреть сообщение
на скрине все видно.
ты ответ тоже в виде скрина предпочитаешь?
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
31.05.2014, 09:08  [ТС]     Программа поиска #9
Вот что выводит если использовать == в место &&
Программа поиска
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
31.05.2014, 09:09  [ТС]     Программа поиска #10
taras atavin, ха ха очень смешно!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,868
Записей в блоге: 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 прохода по строке. Вот и получается, что считает четыре раза по два символа
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
31.05.2014, 09:14  [ТС]     Программа поиска #12
Вопрос. Можно ли объявит символ константой после ввода с консоли?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
31.05.2014, 09:18     Программа поиска #13
Лови короткий вариант решения.
Миниатюры
Программа поиска  
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
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
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,868
Записей в блоге: 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
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
31.05.2014, 09:37  [ТС]     Программа поиска #16
Убрал первый цикл и все работает. Но все таки остается не решенный вопрос.
Почему при втором проходе цикла срабатывает оператор if? Вид там явно показано что if должен работать только с первым элементом вектора.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,868
Записей в блоге: 2
Завершенные тесты: 1
31.05.2014, 09:40     Программа поиска #17
Цитата Сообщение от Altair42 Посмотреть сообщение
Вид там явно показано что if должен работать только с первым элементом вектора.
какие нафиг вектора... первые главы книги для чайников к прочтению
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
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
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
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++ Программа для поиска файлов

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

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

Не по теме:

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

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

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