Нужно написать функцию которая ищет в строке первое вхождение указанной подстроки и возвращает номер её позиции. Вот сама строка (цифры) : "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;
}
#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;
}
int podtsr(string podstr,str)
{
for (int n=0; n < str.length(); n++)
if str[n] == podstr return n;
}
Дебажьте сами, принцип думаю понятен.
{
for (int n=0; n < str.length(); n++)
if str[n] == podstr return n;
}
Дебажьте сами, принцип думаю понятен.
В си или си++, так как си нужно указатели использовать char
Да и помочь или написать за вас, так как ничего не показали, что вы сделали.
Да и помочь или написать за вас, так как ничего не показали, что вы сделали.
Хм.. . Ну, пишите.. .
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;
}
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;
}
Если хотите, чтобы сделали за вас - пишите на мыло. Но не бесплатно
Нда, гугл "поиск подстроки в строке", 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
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
Похожие вопросы
- язык си. задача по языку Си. Задаются коэффициенты системы из трёх линейных уравнений. Найти корни.
- Народ! Срочно! Помогие решить задач в Турбо Паскале!!!!Лучший ответ гарантирую!
- Помогите решить задачу на языке Паскаль. Найти сумму всех чётных чисел от 1 до 1000 (задачу решить 2 способами)
- Задача по языку Си
- Исправте ошибки в задаче на языке Си
- Помогите решить задачу на языке c++. Не понимаю условия в конце кода.
- Нужно решить задачу на языке программирования С++
- Народ! Помогите решить задачи на языке паскаль. Очень срочно надо! Буду рада решению хотя бы одной из списка=)
- Помогите решить задачу на языке Pascal
- Решите задачу на языке паскаль