Другие языки программирования и технологии

Помогие решить задачу на языке Си

Нужно написать функцию которая ищет в строке первое вхождение указанной подстроки и возвращает номер её позиции. Вот сама строка (цифры) : "12654610" строчный массив
Т е мне надо использовать не готовую функцию а самому написать её
Указанная подстрока - это цифра 6, нужно найти её первое вхождение, а конечный результат на экране - индекс первой цифры 6 т е если считать с нуля то её позиция 3, вот эта тройка и должна быть на экране
Если считать с нуля, то её позиция 2 :)

#include <stdio.h>
#include <locale.h>
#include <string.h>
#define BUF 256
int substr(const char *, const char *);
int main() {
    char str[BUF], sub[BUF];
    int index;
    setlocale(LC_CTYPE, "Russian_Russia.1251");
    printf(" Введите строку: ");
    gets_s(str, BUF);
    printf(" Введите подстроку: ");
    gets_s(sub, BUF);
    index = substr(str, sub);
    if (index >= 0) printf(" Индекс первого вхождения: %i\n", index);
    else printf(" Подстрока не входит в строку! \n");
    fflush(stdin);
    getchar();
    return 0;
}
int substr(const char * _str, const char * _sub) {
    size_t size_str = strlen(_str);
    size_t size_sub = strlen(_sub);
    int index = -1;
    if (size_str >= size_sub) {
        const char * beg = _str;
        while (*beg != *_sub && *beg) ++beg;
        if (*beg == *_sub) index = beg - _str;
        while (*beg == *_sub && *_sub) { ++beg; ++_sub; }
        if (*_sub) index = -1;
    }
    return index;
}
Нурсултан Кыдырбаев
Нурсултан Кыдырбаев
55 098
Лучший ответ
int podtsr(string podstr,str)
{
for (int n=0; n < str.length(); n++)
if str[n] == podstr return n;
}

Дебажьте сами, принцип думаю понятен.
Артём Авдеев
Артём Авдеев
82 096
В си или си++, так как си нужно указатели использовать char
Да и помочь или написать за вас, так как ничего не показали, что вы сделали.
Игорь Иваншин
Игорь Иваншин
90 334
Хм.. . Ну, пишите.. .

int subs(char *str, char *substr)
{
char *cur;
int i;

for (cur = str; *cur != '\0'; ++cur) {
if (*cur == *substr) {
for (i = 0; ; ++i) {
if (substr == '\0')
return (cur - str + 1);
}
if (substr != cur)
break;
}
}
return -1;
}
In0Kesha ~~
In0Kesha ~~
9 996
Если хотите, чтобы сделали за вас - пишите на мыло. Но не бесплатно
Сергей *****
Сергей *****
5 321
Нда, гугл "поиск подстроки в строке", 3я ссылка
http://algolist.manual.ru/search/esearch/
Там, совершенно случайно, и описание алгоритмов и примеры на си.
>Алгоритм грубой силы
#define EOS '\0'

void BF(char *x, char *y, int m) {
int i;

/* Ищем до конца, вообще говоря можно до позиции n-m */
for(i=0; *y!=EOS; i++, y++) if(memcmp(y,x,m) == 0) OUTPUT(i);
}

можно заменить memcmp на strncmp
int strncmp(const char* s1, const char* s2, size_t n)
{
while(n--)
if(*s1++!=*s2++)
return *(unsigned char*)(s1 - 1) - *(unsigned char*)(s2 - 1);
return 0;
}

или сразу гуглим "strstr implementation"
http://clc-wiki.net/wiki/strstr