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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Nicl
0 / 0 / 0
Регистрация: 07.10.2008
Сообщений: 26
#1

"Напишите и продемонстрируйте" - что от меня хотят? - C++

10.10.2008, 16:42. Просмотров 1439. Ответов 12
Метки нет (Все метки)

Всех приветствую.
Мне выдано задание, посвящённое работе со строками:
Напишите функции и продемонстрируйте их работу:
C++
1
2
3
4
5
int strlen(char*);
void strcpy (char * out, char * in);
void strcat (char * out, char * in);
char * strcat1 (char * in1, char * in2);); // - вообще не понял синтаксиса
char * revers (char *s);
Возникли следующие вопросы:

1. Под "напишите" имеется ввиду только вызов функций или необходимо их полноценно определять?

2. Все предложенные функции - встроенные? Если да, их нужно объявлять в коде? Нужно ли подключить какие-либо библиотеки?

Пока с первой функцией поступил вот так:
C++
1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
void main()
{
    char *str;
    str = "stroka";
    cout<<strlen(str)<<endl;
}
Если не трудно, напишите небольшие примеры использования функций 2, 3, 4, 5.
У меня постоянно происходят вылеты с системной ошибкой.

Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Angry_Bobo
269 / 31 / 3
Регистрация: 27.08.2008
Сообщений: 156
10.10.2008, 16:48     "Напишите и продемонстрируйте" - что от меня хотят? #2
От вас хотят, чтобы вы написали:

- функцию, вычисляющую длинну строки, не используя модуль <string.h>
- функцию копирования байт одной строки в другую, не используя модуль <string.h>
- функции конкатенации и строк, не используя модуль <string.h>
Nicl
0 / 0 / 0
Регистрация: 07.10.2008
Сообщений: 26
10.10.2008, 16:56  [ТС]     "Напишите и продемонстрируйте" - что от меня хотят? #3
Понятно. Тогда вопрос таков - как это сделать на примере

Код
int strlen(char*);
Не предствляю, как к строке в таком случае обратиться.
Angry_Bobo
269 / 31 / 3
Регистрация: 27.08.2008
Сообщений: 156
10.10.2008, 17:04     "Напишите и продемонстрируйте" - что от меня хотят? #4
ну допустим функция вычисления длинны строки выглядит приблизительно так:
C++
1
2
3
4
5
int strlen( char *str ) {
 int i=0;
 while ( *( str + i )  != '\0' ) i++;
 return i;
}
Nicl
0 / 0 / 0
Регистрация: 07.10.2008
Сообщений: 26
10.10.2008, 17:08  [ТС]     "Напишите и продемонстрируйте" - что от меня хотят? #5
Меня смутило именно отсутствие имени переменной в тексте задания.
Спасибо.

Теперь у меня неоднозначность только с
Код
char * strcat1 (char * in1, char * in2); ) ;
Вторая ; ) там лишняя?
Angry_Bobo
269 / 31 / 3
Регистрация: 27.08.2008
Сообщений: 156
10.10.2008, 17:13     "Напишите и продемонстрируйте" - что от меня хотят? #6
Цитата Сообщение от Nicl Посмотреть сообщение
Меня смутило именно отсутствие имени переменной в тексте задания.
Спасибо.

Теперь у меня неоднозначность только с
Код
char * strcat1 (char * in1, char * in2); ) ;
Вторая ; ) там лишняя?
лишняя...
эта функция должна сложить строки in1 и in2, вернув указатель на результирующую строку, в отличии от strcat, которая добавляет байты in к out
Nicl
0 / 0 / 0
Регистрация: 07.10.2008
Сообщений: 26
11.10.2008, 16:08  [ТС]     "Напишите и продемонстрируйте" - что от меня хотят? #7
Что-то ничего не получается.
C++
1
2
3
4
5
6
7
8
9
10
void strcpy(char * out, char *in)
{
    int i = 0;
    while (*(out + i) != '\0') 
    {
    *(out+i) = *(in+i);
        //вылетает системная ошибка из-за этого момента. Как его корректно реализовать?
    i++;
    }
}
rinal
0 / 0 / 0
Регистрация: 11.10.2008
Сообщений: 15
11.10.2008, 16:17     "Напишите и продемонстрируйте" - что от меня хотят? #8
Я подумаю насчет вашей проблемы
Nicl
0 / 0 / 0
Регистрация: 07.10.2008
Сообщений: 26
11.10.2008, 16:30  [ТС]     "Напишите и продемонстрируйте" - что от меня хотят? #9
Спасибо, но к сожалению реализация очень нужна в пределах часа. У меня сейчас главная проблема - невозможность присвоить разыменованному указателю *(str+i) символ. С остальным кое-как справляюсь.
Prividenie
74 / 74 / 6
Регистрация: 05.10.2008
Сообщений: 233
11.10.2008, 16:59     "Напишите и продемонстрируйте" - что от меня хотят? #10
надо выделить функцией malloc место в памяти под строку
Nicl
0 / 0 / 0
Регистрация: 07.10.2008
Сообщений: 26
11.10.2008, 17:07  [ТС]     "Напишите и продемонстрируйте" - что от меня хотят? #11
void strcpy1(char *s1, char *s2)
{
s2[0]=s1[0];
}
Вылетает окно - "PrjS.exe - обнаружена ошибка. Приложение будет закрыто."
Prividenie
74 / 74 / 6
Регистрация: 05.10.2008
Сообщений: 233
11.10.2008, 20:45     "Напишите и продемонстрируйте" - что от меня хотят? #12
вместо strlen примените свою функцию или посчитайте циклом (си, компилятор турбо си2)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void strcpy1(char *,char *);
int main()
{
char *s1="ssdf";
char *s2;
s2=malloc(strlen(s1)+1);
strcpy1(s2,s1);
printf("\n%s",s2);
free(s2);
return 0;
}
void strcpy1(char *s2, char* s1)
{
int i;
for(i=0;i<=strlen(s1);i++)
     s2[i]=s1[i];
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2008, 16:38     "Напишите и продемонстрируйте" - что от меня хотят?
Еще ссылки по теме:

как сделать , что бы при вводе слова "Minsk" у меня выполнялось действие? C++
Что применить "\n" или "endl"? C++
Как в этой программе правильно вывести матрицу? а то она у меня "пляшет" C++
У меня в задании "Parser xml нужно реализовать самостоятельно." - это как? C++
C++ Непонятки с оператором "delete" У меня изумление. Крашится программа (Qt5.5) Win 8

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

Или воспользуйтесь поиском по форуму:
Nicl
0 / 0 / 0
Регистрация: 07.10.2008
Сообщений: 26
12.10.2008, 16:38  [ТС]     "Напишите и продемонстрируйте" - что от меня хотят? #13
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
#include <iostream>
using namespace std;
void strcpy(char* out, char *in)
{   int len = 0;
    int i = 0;
    while (*(in+len) != '\0')
    {
        len++;
    }
 for (i = 0; i<len; i++)
 {
     out[i] = in[i];
 }
 out[i] = '\0';
}
void main()
{   int len = 0;
    char *str1 = "abc";
    while (*(str1+len) != '\0')
    {
        len++;
    }
    char *str2 = new char[len];
    str2[len] = '\0';
    strcpy(str2,str1);
    cout<<endl<<"Stroka "<<str1<<" skopirovana. Rezultat: "<<str2<<"."<<endl;
}
Реализовал вот так.
Yandex
Объявления
12.10.2008, 16:38     "Напишите и продемонстрируйте" - что от меня хотят?
Ответ Создать тему
Опции темы

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