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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
#1

Обработка символьной строки - C++

27.04.2010, 15:01. Просмотров 541. Ответов 9
Метки нет (Все метки)

(В Си консольная версия) Функция должна находить первое вхождение в строку заданной подстроки.При реализации функции запрещается пользоваться функциями библиотек языка C. Необходимо предусмотреть работу функции при некорректном задании ее параметров. Использовать указатели.Помогите плиз!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
27.04.2010, 15:50     Обработка символьной строки #2
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
#define MAXLEN 1024
//определяет длину нуль-терминированной строки 
int len(char * s)
{ int i=0;
    while(*s++!=0 && i++<1024);
    if(i==255) i=0;
    return i;
}
//сравнивает s и p длиной l, возвращает 1 если равны
int cmp(char *s,char *p,int l)
{int i=0;
    while(i<l){
        if(s[i] != p[i])return 0;
        i++;
    }
    return 1;
 
}
//ищет вхождение подстроки f в строке s, если нет вхождения возвращает -1
int find(char * s, char * f)
{
    int sl = len(s), fl = len(f), sz = sl-fl,pos=0;
    if(sl<fl) return -1;
    do{
       while(*s != *f && pos < sz){s++; pos++;}
       if(cmp(s, f, fl)) return pos;
       pos++;s++;
    }
    while(pos < sz);
    return -1;
}
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
27.04.2010, 16:15  [ТС]     Обработка символьной строки #3
Спс,подскажите пожалуйста,а где должен осуществляться ввод строки и где основная функция?
uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
27.04.2010, 16:46     Обработка символьной строки #4
В функции main...
Я думаю сделаете самостоятельно
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
27.04.2010, 17:10  [ТС]     Обработка символьной строки #5
Можно все-таки проверить? компилятор ошибки выдает((
M128K145
Эксперт С++
8282 / 3501 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
27.04.2010, 18:01     Обработка символьной строки #6
Define, а можете написать какие ошибки?
easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,490
27.04.2010, 18:52     Обработка символьной строки #7
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
 
/* возвращает указатель на первое вхождение строки b в строку a или NULL */
char *mystrstr(const char *a, const char *b){
    const char *pa, *pb;
 
    if ( !a || !b )
        return NULL;
    for ( ; *a; ++a ){
        for ( pa = a, pb = b; *pa && *pa == *pb; ++pa, ++pb )
            ;
        if ( !*pb )
            return (char*)a;
    }
    return NULL;
}
 
size_t mystrlen(const char *s){
    const char *p;
    if ( !s )
        return 0;
    for ( p = s; *p; ++p )
        ;
    return p - s;
}
 
int main(void){
    char s1[BUFSIZ], s2[BUFSIZ], *p;
 
    while ( 1 ){
        printf("String 1: ");
        if ( !fgets(s1, BUFSIZ, stdin) )
            return 1;
        s1[mystrlen(s1) - 1] = '\0';
        if ( !*s1 )
            break;
        printf("String 2: ");
        if ( !fgets(s2, BUFSIZ, stdin) )
            return 1;
        s2[mystrlen(s2) - 1] = '\0';
        if ( !*s2 )
            break;
 
        printf("String 1 %scontain string 2.\n", ( mystrstr(s1, s2)) ? "" : "don't ");
    }
 
    return 0;
}
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
28.04.2010, 14:06  [ТС]     Обработка символьной строки #8
thanks.немного другое условие,необходимо найти совпадения,а вывести с какой позиции! идет первый повтор.т.е. содержит повторяющиеся слова или нет это типа заметки,возвращать на экран надо позицию,с которой начинается повторяющееся слово или хотя бы его номер по счету в предложении,спасибо.
easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,490
28.04.2010, 15:09     Обработка символьной строки #9
Define, функция strstr() возвращает указатель на подстроку b в строке a. Отнимите от него указатель на строку a - получите индекс в строке а, с которого начинается строка b. Но опять же перед тем, как что-то считать, проверяйте возвращённый указатель на неравенство NULL...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2010, 18:58     Обработка символьной строки
Еще ссылки по теме:

C++ Обработка символьной информации
Обработка символьной строки C++
Обработка символьной информации C++
C++ Обработка символьной информации
Обработка символьной информации C++

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

Или воспользуйтесь поиском по форуму:
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
29.04.2010, 18:58  [ТС]     Обработка символьной строки #10
если вам не сложно,не могли бы прокомментировать программу?просто только начинаю программировать и не совсем понятны некоторые действия..
Yandex
Объявления
29.04.2010, 18:58     Обработка символьной строки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru