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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите написать функцию StrSet (s, n, l, t) 
:(
    Опции темы
OJler
Дата 10.5.2014, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Функция StrSet (s, n, l, t)
Назначение: установка l символов строки s, начиная с позиции n, в значение t.
Разработать два варианта заданной функции с использованием:
а) индексированных массивов;
б) указателей.

За ранее благодарен.

пс. есть вот такой вот вариант

Код
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
char* strset(char *s, int pos, int len, char c)
{
_asm{
mov edi, s;
add edi, pos;
mov ecx, len; 
mov al, c; 
rep stosb;
}
return s;
};
 
void main(void)
{ char* s = "В чащах юга жил-был цитрус. Да, но фальшивый экземпляр! (0123456789)-+*=[]{}\/?";
puts(s);
puts(strset(s,10,20,'+'));


но не получается корректно перевести АСМ часть на С, может кто сможет помочь )

Модератор: не забываем пользоваться кнопочкой "Код"
PM MAIL   Вверх
LeonidPr
Дата 11.5.2014, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

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



Код

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

char* strset(char *s, int pos, int len, char c)
{
    for (int i=pos; i<pos+len;i++)
        *(s+i)=c;
    return s;
};

int main(void)
{
    char* s = "В чащах юга жил-был цитрус. Да, но фальшивый экземпляр! (0123456789)-+*=[]{}\\/?";

    puts(s);
    puts(strset(s,10,10,'+'));
};


--------------------
pkunzip.zip
PM MAIL   Вверх
feodorv
Дата 11.5.2014, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Ну, если не проверять на завершающий ноль, то можно и так. А можно и так:
Код

  memset( s+pos, c, len);



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
LeonidPr
Дата 13.5.2014, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

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



х-м, да, про memset запамятовал
--------------------
pkunzip.zip
PM MAIL   Вверх
baldina
Дата 13.5.2014, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

// указатели
char* strset(char *s, int pos, int len, char c)
{
    char *begin = s+pos;
    char *end = begin+len;
    while (begin != end)
        *begin++ = c;
    return s;
}

// индексация
char* strset(char *s, int pos, int len, char c)
{
    for (int i=0; i != len; ++i)
       s[pos+i]=c;
    return s;
}


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

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

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

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

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


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

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


 




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


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

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