Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2011, 17:42   #1
dykatob
Пользователь
 
Регистрация: 15.04.2011
Сообщений: 38
По умолчанию Работа со строками. Не пойму как определить сколько раз одна строка встречается в другой

Вот то что я написал , по этой тема так сказать)

while (i<strlen(str1))
{
for (j=0; j<strlen(str2); j++)
if (str1[i+j]==str2[j]) n++;
else n = 0;
if (n==strlen(str2))
{
k++;
i+= strlen(str2)-1;
n = 0;
}
i++;
}
if (k==0) printf ("Stoka 2 ne vstrechaetcia v stroke 1");
else printf ("2 Stroka vstrechaetsya v 1 stroke %d raz(a).\n", k);

ПРограмма работает частично, например если во второй строке больше 2-ух букв , то программа не работает
НАпример 1-ая строка: ggggrtref
2-ая строка: gggg
Ответ должен быть по идее 1 раз встречается 2-ая строка в первой, но он выдает что она не встречается в 1-ой строке =(
жду ваших предложений и советов
dykatob вне форума Ответить с цитированием
Старый 29.04.2011, 18:01   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от dykatob Посмотреть сообщение
Вот то что я написал , по этой тема так сказать)

while (i<strlen(str1))
{
for (j=0; j<strlen(str2); j++)
if (str1[i+j]==str2[j]) n++;
else n = 0;
if (n==strlen(str2))
{
k++;
i+= strlen(str2)-1;
n = 0;
}
i++;
}
if (k==0) printf ("Stoka 2 ne vstrechaetcia v stroke 1");
else printf ("2 Stroka vstrechaetsya v 1 stroke %d raz(a).\n", k);

ПРограмма работает частично, например если во второй строке больше 2-ух букв , то программа не работает
НАпример 1-ая строка: ggggrtref
2-ая строка: gggg
Ответ должен быть по идее 1 раз встречается 2-ая строка в первой, но он выдает что она не встречается в 1-ой строке =(
жду ваших предложений и советов
i++;
Почему?
Переменная не используетсяя.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 29.04.2011, 18:29   #3
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Код:
#include <iostream>

using namespace std;

int main()
{
    string str1, str2;
    int len1, len2;
    int count = 0;

    cout << "Введите первую строку:" << endl;
    cin >> str1;
    cout << "Введите второе строку:" << endl;
    cin >> str2;

    bool match;
    
    len1 = str1.length();
    len2 = str2.length();

    for (int i = 0; i < len1 - len2 + 1; i++)
    {
        match = false;
        for (int j = 0; j < len2; j++)
        {
            if (str2[j] == str1[i + j]) match = true;
            else
            {
                match = false;
                break;
            }
        }
        if (match) count++;
    }
    
    cout << "Второе строка ";
    if (count == 0) cout << "не ";
    cout << "встречается в первой ";
    if (count != 0) cout << count << " раз(а)" << endl;
    return 0;
}
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 29.04.2011, 18:41   #4
dykatob
Пользователь
 
Регистрация: 15.04.2011
Сообщений: 38
По умолчанию

i+= strlen(str2)-1;
вот используется
dykatob вне форума Ответить с цитированием
Старый 29.04.2011, 18:48   #5
dykatob
Пользователь
 
Регистрация: 15.04.2011
Сообщений: 38
По умолчанию

Большое спасибо Mandrivnyk
dykatob вне форума Ответить с цитированием
Старый 29.04.2011, 18:49   #6
-LeV-
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 29
По умолчанию

хм, странно, а функция strstr(char* str1, char* str2) уже не кошерна?

Код:
char str1[] = "uxcrtyuxcuxcc";
char str2[] = "uxc";
char* ptr = strstr(str1, str2);
int count = 0;
while(ptr != NULL)
{
count++;
ptr += strlen(str2);
ptr = strstr(ptr, str2);
}
-LeV- вне форума Ответить с цитированием
Старый 29.04.2011, 18:55   #7
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Кхм...
Я почему-то решил, что необходимо обойтись циклическим перебором по строке -)
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 29.04.2011, 19:23   #8
dykatob
Пользователь
 
Регистрация: 15.04.2011
Сообщений: 38
По умолчанию

Что такое bool match скажите пожалуйста
dykatob вне форума Ответить с цитированием
Старый 29.04.2011, 20:40   #9
dykatob
Пользователь
 
Регистрация: 15.04.2011
Сообщений: 38
По умолчанию

ребят помогите пож.с прогой ......
условие
определить сколько раз 2 строка встречается в 1 и определить наиболее часто встречаемое буквосочетание из 2х букв, анализировать по 2 строкам
вот мой код
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream>
using namespace std;
int n=0,k=0,m=0,x=0,y=0;
int main()
{
string str1, str2, str3;
int len1, len2, len3;
int count = 0;


cout << "Vvedite 1 ctroky:" << endl;
cin >> str1;
cout << "Vvedite 2 ctroky:" << endl;
cin >> str2;

bool match;

len1 = str1.length();
len2 = str2.length();
len3 = len1 + len2;

for (int i = 0; i < len1 - len2 + 1; i++)
{
match = false;
for (int j = 0; j < len2; j++)
{
if (str2[j] == str1[i + j]) match = true;
else
{
match = false;
break;
}
}
if (match) count++;
}

cout << "Vtoraiy ";
if (count == 0) cout << "ne ";
cout << "vsterchaetc ";
if (count != 0) cout << count << " raz(a)" << endl;

getch();

int *k=new int[len3];
if (x==len1) x++;
for (x=0;x<len3;x++)
k[x]=0;

for (x=0;x<len3-1;x++)
for (y=x;y<len3-1;y++)
if ((str3[x]==str3[y])&&(str3[x+1]==str3[y+1]))
k[x]++;

n=0;y=0;

for (x=0;x<len3-1;x++)
if (n<k[x])
{n=k[x];
x=y;}
m=0;
for (x=0;x<len3-1;x++)
if (n==k[x])
m++;
if (m>=2)
printf("\n Net bycvosochetania");
else printf("\n chasto vstrechaemoe bycvosochetanie: %c%c",str3[y],str3[y+1]);
getch();
return 0;


}
dykatob вне форума Ответить с цитированием
Старый 29.04.2011, 21:19   #10
dykatob
Пользователь
 
Регистрация: 15.04.2011
Сообщений: 38
По умолчанию

up! up up!!
вверх по списку)
dykatob вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как подсчитать сколько раз встречается символ в строке? zver777 Общие вопросы Delphi 10 10.01.2010 00:57
PHP.Как посчитать, сколько раз слово встречается в файле? Princesse Помощь студентам 0 07.12.2009 00:24
Сколько раз слово встречается в строке ksu25 Паскаль, Turbo Pascal, PascalABC.NET 1 25.09.2009 15:53
Определить сколько раз встречается в тексте самое короткое слово - Delphi 7 Леди Уинтер Помощь студентам 3 08.01.2008 17:56
Сколько раз встречается данное слово n1k1c4 Помощь студентам 4 13.12.2007 20:33