Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужны функции из string.h, Программа без использования string.h 
:(
    Опции темы
Zaic
  Дата 7.1.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.5.2006

Репутация: нет
Всего: нет



Задача состоит в том чтоб написать программу работающую со строкой, НО без использования библиотеки string.h

Нужны функции в раскрытом виде из этой библиотеки, а именно эти:

strspn

strcspn

strncmp

strncat

Зараннее спасибо, надеюсь на помощь. smile 
PM MAIL   Вверх
Lazin
Дата 7.1.2008, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(Zaic @  7.1.2008,  17:05 Найти цитируемый пост)
НО без использования библиотеки string.h

во первых это не библиотека, а заголовочный файл, во вторых такого заголовочного файла нет, а есть просто string))
кстати есть еще ф-ии из crtl - strcmp strcpy и прочие
PM MAIL Skype GTalk   Вверх
Zaic
Дата 7.1.2008, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.5.2006

Репутация: нет
Всего: нет



Есть программа на С, нужно заменить фукции из string.h на собственные, т.е. чтоб программа работала без "#include <string.h>"
вот я и ищую эти функции, чтоб просто вставить их в прогу...

Код

#include <stdio.h>
#include <conio.h>
#include <string.h>


int len(char *st)
{ 
int i; 

for (i = 0; st[i] != '\0';i++); 
return i; 
}
char * strcat1(char *dest, const char *src)
{
        size_t dest_len = len(dest);
        size_t i;

        for (i = 0 ; src[i] != '\0' ; i++)
                dest[dest_len + i] = src[i];
        dest[dest_len + i] = '\0';

        return dest;
}

void first_word(char c1[],char c2[],char c3[], char ** s1, char ** e1)
{
char * p1=NULL;
char * p2=NULL;
char * p_out=NULL;
char * fword=NULL;
int l1,l2;
int fl=1;
p1 = c1;
p_out = c2;
fword = c3;
*p_out = '\0';
*fword = '\0'; 

while(*(p1+=strspn(p1," \t")))
    {
    l1 = strcspn(p1, " \t");
    p2=c1;
    fl = 1;
    
    while(*(p2+=strspn(p2," \t")))
    {
        l2 = strcspn(p2, " \t");
        if (p1 != p2)
        {
            if (l1 == l2)
                if (strncmp(p1,p2,l1) == 0)
                {
                    fl = 0;
                    break;
                }
        }
        p2+=l2;
    }
    
    if (fl == 1)
    {
            if (*p_out) strcat1(p_out," ");
            if (*p_out == 0) {strncat(fword,p1,l1);
            strcat1(fword," ");}
            strncat(p_out,p1,l1);
    }
    p1+=l1;
}
strncat(fword,p1-1-l1-l2,l1);
}

int main(void)  
{    
    char st1[101],st2[101],st3[101];
    char * s1;
    char * e1;
    printf("Input line->");
    gets(st1);
    first_word(st1,st2,st3,&s1,&e1);
    puts(st2);
    puts(st3);
    
return 0;
}

PM MAIL   Вверх
GrayCardinal
Дата 7.1.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: нет
Всего: 58



Zaic, 
А в чём проблема ? Сложно побайтный цикл строки сделать и вставить соотв. условия ?


--------------------
PM MAIL WWW   Вверх
Zaic
Дата 7.1.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.5.2006

Репутация: нет
Всего: нет



Цитата(GrayCardinal @ 7.1.2008,  17:54)
Zaic, 
А в чём проблема ? Сложно побайтный цикл строки сделать и вставить соотв. условия ?

Гениально! Ну раз сюда пришёл с просьбой, то наверное сам не могу написать...
PM MAIL   Вверх
bsa
Дата 8.1.2008, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



А зря не можешь - все очень легко:
Код
#ifndef NULL
# define NULL ((void*)0)
#endif //NULL

const char *strchr(const char *s, int c)
{
    for(; *s; ++s)
        if ( *s == (char)c )
             return s;
    return NULL;
}

size_t my_strspn(const char *s, const char *accept)
{
    size_t result = 0;
    for(; s && strchr(accept, *s); ++s, ++result);
    return result;
}

size_t my_strscpn(const char *s, const char *accept)
{
    size_t result = 0;
    for(; s && ( !strchr(accept, *s) ); ++s, ++result);
    return result;
}

int my_strcmp(const char *s1, const char *s2)
{
      for(; s1 && s2 && (*s1 == *s2); ++s1, ++s2);
      return *s1 - *s2;
}

size_t my_strlen(const char *s)
{
    size_t sz;
    for(sz = 0; *s; ++s, ++sz);
    return sz;
}

char *my_strcpy(char *dest, const char *src)
{
    for(; *src; ++src, ++dest)
        *dest = *src;
    *dest = '\0';
    return dest;
}

char *my_strcat(char *dest, const char *src)
{
    char * const s = dest + my_strlen(dest);
    my_strcpy(s, src);
    return dest;
}

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0581 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.