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

Дана строка - C++

Восстановить пароль Регистрация
 
MEOWPOWER
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 4
14.11.2013, 15:59     Дана строка #1
Здравствуйте!
Задача: Дана строка. Определить, сколько раз входит в нее группа букв abc.

Вот мое решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
    setlocale(0,"");
 
    int i;
    int count = 0;
    char str[256];
 
    cout << "Введите строку: " << endl;
    gets_s(str);
 
    for (i = 0; i < strlen(str); i++ )
    {
        if ((str[i] == 'a') && (str[i+1] == 'b') && (str[i+2] == 'c'))
        count++;
    }
 
    cout << "В строке группа букв abc встречается " << count << " раз(а) " << endl;
 
    system("pause");
    return 0;
}
Вопрос: Как можно улучшить программу ? Накидайте ваши варианты поиска группы букв abc

Заранее спасибо!)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
14.11.2013, 16:10     Дана строка #2
разве что, если нашли три символа - 'i' увеличить еще на 2 вручную чтобы не проходить по уже найденному слову abc

Добавлено через 1 минуту
Цитата Сообщение от MEOWPOWER Посмотреть сообщение
for (i = 0; i < strlen(str); i++ )
тут может вылететь на
Цитата Сообщение от MEOWPOWER Посмотреть сообщение
(str[i+1] == 'b') && (str[i+2] == 'c')
конечное значение i надо уменьшить на 2 (ну или на 1 за счет того что нулем кончается строка)
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
14.11.2013, 16:16     Дана строка #3
MEOWPOWER, как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string str;
    int num = 0;
    size_t last = 0;
    std::cout << "input your string" << std::endl;
    std::getline(std::cin, str);
    while (std::string::npos != (last = str.find("abc", last)))
    {
        ++num;
        last += 3;
    }
    std::cout << "the substring \"abc\" is present in your string " << num <<  "times" << std::endl;
    std::system("pause");
    return 0;
}
Добавлено через 52 секунды
Цитата Сообщение от MEOWPOWER Посмотреть сообщение
for (i = 0; i < strlen(str); i++ )
* * {
* * * * if ((str[i] == 'a') && (str[i+1] == 'b') && (str[i+2] == 'c'))
* * * * count++;
* * }
Вылезли за пределы строки.
MEOWPOWER
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 4
14.11.2013, 16:27  [ТС]     Дана строка #4
Все понял!
Спасибо большое! )
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
14.11.2013, 16:53     Дана строка #5
Вот вам шаблон из STL
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
  template<typename _InputIterator, typename _ForwardIterator>
    _InputIterator
    find_first_of(_InputIterator __first1, _InputIterator __last1,
          _ForwardIterator __first2, _ForwardIterator __last2)
    {
      for ( ; __first1 != __last1; ++__first1)
    for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
      if (*__first1 == *__iter)
        return __first1;
      return __last1;
    }

Библиотека написанна профессионалами. Думаю стоит принять во внимание их код. Дерзайте.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
14.11.2013, 17:04     Дана строка #6
Ilot, не, ну классно, но я лично не понял к чему это)
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
14.11.2013, 17:23     Дана строка #7
Цитата Сообщение от metaluga145 Посмотреть сообщение
но я лично не понял к чему это)
Цитата Сообщение от Ilot Посмотреть сообщение
; ++__first1)
вот кстати еще как можно ускорить алгоритм)
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
14.11.2013, 17:40     Дана строка #8
Raali, та фраза была к тому, что можно ускорить алгоритм или что? может тогда вообще заново std писать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2013, 09:31     Дана строка
Еще ссылки по теме:

дана строка-предложение. зашифровать ее C++
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н C++
Дана строка символов. Проверьте,является ли данная строка палиндромом C++

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

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
15.11.2013, 09:31     Дана строка #9
metaluga145, товарищ Raali хотел сказать, что префиксный инкремент для итераторов
выполняется быстрее постфиксного.
Цитата Сообщение от metaluga145 Посмотреть сообщение
может тогда вообще заново std писать?
Заново - нет, а вот пользоваться реализациями алгоритмов из STL очень даже полезно. В идеале их нужно знать все так как зачастую это одни из самых оптимальных алгоритмов (но не без исключений).
Мне вот интересно если на собеседовании или в тестовом задании попросят написать программу, но без использования STL и если реализовать тот же алгоритм "своими руками" как к этому отнесутся работодатели?
Цитата Сообщение от metaluga145 Посмотреть сообщение
Ilot, не, ну классно, но я лично не понял к чему это)
И правильно не поняли. Я немного тупанул не тот алгоритм привел. Смотреть в сторону find_fist_of
Yandex
Объявления
15.11.2013, 09:31     Дана строка
Ответ Создать тему
Опции темы

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