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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2014, 00:23   #1
paulusfr
Пользователь
 
Регистрация: 12.10.2014
Сообщений: 10
По умолчанию Простая задача на строки

Язык Си
Код:
#include <stdio.h>
#include <string.h>
 
int main()
{
    int l1,l2,c;
    char s1[100000],s2[1000],*t,*st;
//s1 - строка в которой искать, s2 - подстрока, которую надо искать
    scanf("%d %d\n",&l1,&l2); //длины строк, хз зачем
    gets(s1); //сами строки
    gets(s2);
    st=s1; //адрес первого символа s1 для поиска начиная с него
    c=0; //счетчик вхождений
    while (1) {
        t=strstr(st,s2); //если есть вхождение то в t пишем адрес первого символа подстроки s2
        if (t==NULL) break; //если слов (больше) нет, то выход
        c++; // нашли вхождение
        st=t+1; // далее пытаемся найти следующее вхождение, уже со следующего символа
    }
    printf("%d",c);
    return 0;
}
Эта программа находит число вхождений s2 в s1 (маленькие латинские символы). Одна проблема - она работает не на всех тестах (которые я, естественно, не знаю). И я В УПОР не понимаю, почему. Подразумевается что все "тесты" хорошие (соответствуют условию, которое вкратце описал). Все тесты из головы программа успешно проходит. Прошу помощи, хотя бы намекните в чём может быть проблема.

Последний раз редактировалось paulusfr; 12.10.2014 в 01:20.
paulusfr вне форума Ответить с цитированием
Старый 12.10.2014, 00:41   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Отдели мухов от котлетов. Подробности давай.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.10.2014, 01:18   #3
paulusfr
Пользователь
 
Регистрация: 12.10.2014
Сообщений: 10
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Отдели мухов от котлетов. Подробности давай.
Дал. Ваш черёд
Алгоритм банальный, может быть дело в больших числах? но непонятно, причем здесь это
paulusfr вне форума Ответить с цитированием
Старый 12.10.2014, 01:21   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Дал.
Логика программы была понятна и без комментов.
Мне надо примеры: мухи - работающие, котлеты - неработающие.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.10.2014, 01:30   #5
paulusfr
Пользователь
 
Регистрация: 12.10.2014
Сообщений: 10
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Логика программы была понятна и без комментов.
Мне надо примеры: мухи - работающие, котлеты - неработающие.
Дело как раз в том, что я не знаю, где программа дает неправильный ответ (тесты недоступны глазу), но это имеет место.
пример данных, на которых программа работает:
вход:
5 2
aaaaa
aa
выход:
4

на больших числах тоже вроде бы всё нормально
Я понимаю, что это практически гадание на кофейной гуще, но проблему как-то надо решить.
paulusfr вне форума Ответить с цитированием
Старый 12.10.2014, 01:36   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Дело как раз в том, что я не знаю, где программа дает неправильный ответ (тесты недоступны глазу), но это имеет место.
Прикалываешься? И как я буду моделировать 100%-ную ошибочную ситуацию для поиска логической ошибки?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.10.2014, 01:50   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

А если с2 будет 0 длины?
p51x вне форума Ответить с цитированием
Старый 12.10.2014, 01:51   #8
paulusfr
Пользователь
 
Регистрация: 12.10.2014
Сообщений: 10
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Прикалываешься? И как я буду моделировать 100%-ную ошибочную ситуацию для поиска логической ошибки?
Я лишь спрашиваю, где в подобном алгоритме (может быть, с точки зрения особенностей отдельных операторов/функций) может случиться ошибка на каких-нибудь пограничных данных

Цитата:
Сообщение от p51x Посмотреть сообщение
А если с2 будет 0 длины?
по условию s1,s2 >= 1
но нет, я добавил условия и всё тот же тест программа не проходит

Вопрос решён, всем спасибо

Последний раз редактировалось Stilet; 12.10.2014 в 10:16.
paulusfr вне форума Ответить с цитированием
Старый 12.10.2014, 02:26   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Мне не понять всю глубину наших глубин.
Пойду-ка я спать.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача 1-реализована.Задача 2-Найти и вывести символы 2-ой строки не совпавшие с символами 1-ой строки Leshkin Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 12.11.2013 08:57
Простая задача cundpom Помощь студентам 3 18.12.2010 01:08
Простая задача. Наташаша Помощь студентам 0 28.10.2010 00:53
Не простая задача !!! MaxZoa Microsoft Office Excel 2 06.03.2008 18:07
Простая задача utyyf Помощь студентам 25 18.10.2007 14:50