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

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

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

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

14.11.2013, 15:59. Просмотров 459. Ответов 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++):

Дана строка. Подсчитать сколько раз первая строка входит во вторую - C++
Дана строка. Подсчитать сколько раз первая строка входит во вторую. Например: вводим &quot;при&quot; (строка должна вводиться с клавиатуры, как на...

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

дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. Строка должна вводиться с клавиатуры. - C++
Будьте добры,помогите с решением задачи: дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. Строка...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 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
Модератор
Эксперт С++
1809 / 1166 / 226
Регистрация: 16.05.2013
Сообщений: 3,069
Записей в блоге: 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
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 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 писать?
Ilot
Модератор
Эксперт С++
1809 / 1166 / 226
Регистрация: 16.05.2013
Сообщений: 3,069
Записей в блоге: 5
Завершенные тесты: 1
15.11.2013, 09:31 #9
metaluga145, товарищ Raali хотел сказать, что префиксный инкремент для итераторов
выполняется быстрее постфиксного.
Цитата Сообщение от metaluga145 Посмотреть сообщение
может тогда вообще заново std писать?
Заново - нет, а вот пользоваться реализациями алгоритмов из STL очень даже полезно. В идеале их нужно знать все так как зачастую это одни из самых оптимальных алгоритмов (но не без исключений).
Мне вот интересно если на собеседовании или в тестовом задании попросят написать программу, но без использования STL и если реализовать тот же алгоритм "своими руками" как к этому отнесутся работодатели?
Цитата Сообщение от metaluga145 Посмотреть сообщение
Ilot, не, ну классно, но я лично не понял к чему это)
И правильно не поняли. Я немного тупанул не тот алгоритм привел. Смотреть в сторону find_fist_of
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2013, 09:31
Привет! Вот еще темы с ответами:

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

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

Дана строка, состоящая из слов - C++
Дана строка, состоящая из слов, разделенных пробелами. Вывести на экран порядковый номер слова максимальной длины и номер позиции строки с...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.11.2013, 09:31
Ответ Создать тему
Опции темы

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