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

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

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

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

14.11.2013, 15:59. Просмотров 436. Ответов 8
Метки нет (Все метки)

Здравствуйте!
Задача: Дана строка. Определить, сколько раз входит в нее группа букв 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

Заранее спасибо!)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2013, 15:59     Дана строка
Посмотрите здесь:

Дана строка символов - C++
Помогите написать лабу. Дана строка символов. Распечатать слова, отличные от последнего, оставив в каждом слове только первые вхождения...

Дана строка из 32 символов - C++
Дана строка из 32 символов, содержащая только символы '0' и '1'. 1)Строка представляет целое число, заданное в двоичном дополнительном...

Дана строка символов - C++
Дана строка символов введенных с клавиатуры. Определить является ли введенный символ целым числом. (помогите)

Дана строка символов... - C++
Помогите пожалуйста решить задачку на C++ Дана строка символов. Заменить в строке сочетание символов &quot;ты&quot; на &quot;вы&quot;. Заранее...

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

Дана строка символов до точки - C++
Помогите составить эту программу: Дана строка символов до точки. Выделить в ней все русские буквы, сделав их заглавными.

Дана строка латинских символов - C++
Дана строка латинских символов. Напечатать эту строку, предварительно заменив все вхождения «abc» на «def». Помогите написать)))

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,054
Завершенные тесты: 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
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 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
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,054
Завершенные тесты: 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++
Подсчитать,сколько слов начинается с указанной буквы

Дана строка,состоящая из нескольких слов - C++
Дана строка, состоящая из нескольких слов,набрать заглавными буквами и разделенный пробелами (один или несколькими).Найти количество...

Дана строка, содержащая англ. текст - C++
Дана строка, содержащая англ. текст. Найти количество слов, начинающихся с буквы B.


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

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 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     Дана строка
Ответ Создать тему
Опции темы

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