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

Работа со строками, алгоритм есть. - C++

Восстановить пароль Регистрация
 
Assign_me_plz
5 / 5 / 0
Регистрация: 05.06.2011
Сообщений: 40
15.01.2012, 19:02     Работа со строками, алгоритм есть. #1
Задача сводится к тому, что необходимо проверить вхождение в строку определенного набора символов (далее "маска").
Алгоритм реализации прост как моя жизнь, но не хватает знаний. Знатоки С\С++ помогите!
Алгоритм заключаться в том, чтобы проверять по символьно, т.е. берем 1 символ маски, ищем его в строке, после нахождения берем второй и сравниваем со следующим символом строки, и т.д. пока маска не закончится. После выполнения фиксируем последний елемент строки, который подошел к маске, и с него продолжаем поиск, парралельно сделав +1 на счетчике.
Если можете, реализуйте, помогите.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2012, 19:02     Работа со строками, алгоритм есть.
Посмотрите здесь:

работа со строками C++
C++ С++ «Работа со строками»
C++ Работа со строками
C++ Работа со строками
Работа со строками C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.01.2012, 19:08     Работа со строками, алгоритм есть. #2
Цитата Сообщение от Assign_me_plz Посмотреть сообщение
Знатоки С\С++
std::string::find
Assign_me_plz
5 / 5 / 0
Регистрация: 05.06.2011
Сообщений: 40
15.01.2012, 19:16  [ТС]     Работа со строками, алгоритм есть. #3
Полный код, если вам не сложно.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
15.01.2012, 19:18     Работа со строками, алгоритм есть. #4
Цитата Сообщение от Assign_me_plz Посмотреть сообщение
С\С++
Не понял ничего практически, но смутно догадываюсь, что что-то из
strstr()
strchr()
strpbrk()
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.01.2012, 19:21     Работа со строками, алгоритм есть. #5
Assign_me_plz,
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 main()
{
    std::string str1, str2;
    
    std::cout << "Enter string 1: ";
    std::getline(std::cin, str1);
    std::cout << "Enter string 2: ";
    std::getline(std::cin, str2);
    
    std::cout << "String 1 is "
              << (str1.find(str2) != std::string::npos ? "" : "not ")
              << "contains string 2" << std::endl;
        
    
    return 0;
}
megastriker
49 / 49 / 18
Регистрация: 05.12.2010
Сообщений: 261
15.01.2012, 21:36     Работа со строками, алгоритм есть. #6
подойдет функция strstr(char *s1, char *s2) из <string.h>, которая проверяет, есть ли подстрока s2 в s1.

ну а если ею пользоваться нельзя, то можно написать функцию сравнения, где поочередно берутся по элементу из маски и строки и сравниваются.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2012, 01:25     Работа со строками, алгоритм есть.
Еще ссылки по теме:

Работа со строками C++
C++ работа со строками
C++ Работа со строками

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

Или воспользуйтесь поиском по форуму:
Assign_me_plz
5 / 5 / 0
Регистрация: 05.06.2011
Сообщений: 40
16.01.2012, 01:25  [ТС]     Работа со строками, алгоритм есть. #7
Черт, ребята, перепутал, мне надо посчитать все то что я раньше написал + исходную строку заменить на ( в начале написать *наша маска*(*кол-во повторений*)*вся остальная строка без нашей маски*).

Добавлено через 1 час 24 минуты
Собственно прогу написал, без финальной части ( удаление масок из строки и т.д.)
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
29
30
31
32
#include<string.h>
#include<conio.h>
#include<stdio.h>
 
int main()
{
    char row[256],mask[256],aftermask[256];;
    int i,n;
    
    printf("Enter row:\n");
    scanf("%s",row);
    printf("Enter mask :\n");
    scanf("%s",mask);
  n=0;
 int t=strlen(mask);
  for ( i = 0;  i<=(strlen(row)); i++)
{
        if (row[i]==mask[0])
{
  for (int k = 1; k<=(strlen(mask)); k++)
 {
 if (row[i+k]!=mask[k])break;
 if (k==(t-1)) (n=n+1);
 }
}
}
printf("%i",n);
printf("\t < count of mask incoming in our string");
 
getch();
    return (0);
}
Yandex
Объявления
16.01.2012, 01:25     Работа со строками, алгоритм есть.
Ответ Создать тему
Опции темы

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