Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2012, 15:09   #1
Lokomoss
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 17
По умолчанию Функции ,которые выполняли тоже самое ,что strstr, strcpy , strlen

Вот код ,только выдает ошибки,не могу понять,что именно так. Могли бы объяснить,что неправильно?
Код:
#include <stdio.h>
#include <stdlib.h>
int main (void){
    int k_strcpy(char* s1, const char* s2);
    int char *mstrstr(char *s1, char *s2);
    int k_strlen(const char* s);
    char s[]="Hello world!";
    char s1[]="Hello my dear son and world";
    char s2[]="Hello how are you and world";
    *mstrstr(s1,s2);
    k_strcpy(s1,s2);
    k_strlen(s);
    printf("\n strstr= %s\n", *mstrstr(s1,s2));
    printf("\n strcpy= %s\n", k_strcpy(s1,s2));
    printf("\n strlen= %s\n", k_strlen(s));
    return 0;
    }
         
         void k_strcpy(char* s1, const char* s2)
              {
               while(*s1++ = *s2++);
               }

               
               char *mstrstr(char *s1, char *s2) {
                     int i, j = 0;
                     int inmatch = 0;
                     char *first_symbol = NULL;
                     int cur_symbol_s1 = 0;
  
                     for (j; s2[j] != '\0'; j++) {
                      for (i = cur_symbol_s1; s1[i] != '\0'; i++) {
                          if (s1[i] == s2[j]) {
	                          if (inmatch == 0) {
                                 first_symbol = &s1[i];
                                  inmatch = 1;
                                  }
                                  cur_symbol_s1 = i + 1;
	                              break;
                                    }
                                     if (inmatch == 1 && s1[i] != s2[j]) {
                                       inmatch = 0;
                                       	first_symbol = NULL;
                                           j = 0;
                                             break;
                                             }
                                              }
                                              }

                                               return first_symbol;
                                               }



                                             
                                                int k_strlen(const char* s)
                                                { 
                                                  	const char *p = s;
                                                   	while (*p++);
                                                   	return p - s - 1;
                                                     }
Lokomoss вне форума Ответить с цитированием
Старый 14.10.2012, 17:19   #2
DRFRIMEN
Пользователь
 
Регистрация: 09.10.2012
Сообщений: 15
По умолчанию

Все функции опиши выше основной функции main.

И почему вы пытаетесь вывести результат функции k_strcpy? Она ведь ничего не возвращает

Последний раз редактировалось DRFRIMEN; 14.10.2012 в 17:25.
DRFRIMEN вне форума Ответить с цитированием
Старый 14.10.2012, 17:27   #3
DRFRIMEN
Пользователь
 
Регистрация: 09.10.2012
Сообщений: 15
По умолчанию

Вот мой вариант

Код:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>



void k_strcpy(char* s1, const char* s2)
{
	while(*s1++ = *s2++);
}


char *mstrstr(char *s1, char *s2) {
	int i, j = 0;
	int inmatch = 0;
	char *first_symbol = NULL;
	int cur_symbol_s1 = 0;

	for (j; s2[j] != '\0'; j++) {
		for (i = cur_symbol_s1; s1[i] != '\0'; i++) {
			if (s1[i] == s2[j]) {
				if (inmatch == 0) {
					first_symbol = &s1[i];
					inmatch = 1;
				}
				cur_symbol_s1 = i + 1;
				break;
			}
			if (inmatch == 1 && s1[i] != s2[j]) {
				inmatch = 0;
				first_symbol = NULL;
				j = 0;
				break;
			}
		}
	}

	return first_symbol;
}




int k_strlen(const char* s)
{ 
	const char *p = s;
	while (*p++);
	return p - s - 1;
}


int main (void){
	/*int k_strcpy(char* s1, const char* s2);
	char *mstrstr(char *s1, char *s2);
	int k_strlen(const char* s);*/
	char s[]="Hello world!";
	char s1[]="Hello my dear son and world";
	char s2[]="Hello how are you and world";
	*mstrstr(s1,s2);
	k_strcpy(s1,s2);
	k_strlen(s);

	std::cout << k_strlen(s) << 	std::endl;
	std::cout << *mstrstr(s1,s2) << 	std::endl;

	system("pause");
	return 0;
}
DRFRIMEN вне форума Ответить с цитированием
Старый 14.10.2012, 20:00   #4
Lokomoss
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 17
По умолчанию

У меня несколько вопросов. Первый,что за библиотека такая #include <iostream>? Впервые вижу.
Второй, что делают эти строчки :
Код:
std::cout << k_strlen(s) << 	std::endl;
	std::cout << *mstrstr(s1,s2) << 	std::endl;
Я такое тоже никогда не встречала,учитывая что работаю только с середины сентября на этом языке и приходится кое-как ворочаться.
Пока все,была бы очень благодарна за объяснение!И спасибо за корректировку программы!
Lokomoss вне форума Ответить с цитированием
Старый 14.10.2012, 21:46   #5
DRFRIMEN
Пользователь
 
Регистрация: 09.10.2012
Сообщений: 15
По умолчанию

1. Библиотека <iostream>
Цитата:
iostream — заголовочный файл с классами, функциями и переменными для организации ввода-вывода в языке программирования C++. Он включён в стандартную библиотеку C++. Название образовано от Input/Output Stream («поток ввода-вывода»). В языке C++ и его предшественнике, языке программирования Си, нет встроенной поддержки ввода-вывода, вместо этого используется библиотека функций. iostream управляет вводом-выводом, как и stdio.h в Cи. iostream использует объекты cin, cout, cerr и clog для передачи информации в и из стандартных потоков ввода, вывода, ошибок (без буферизации) и ошибок (с буферизацией) соответственно.
Взято из: http://ru.wikipedia.org/wiki/Iostream

2. Строки выводят результаты ваших функций в стандартный поток вывода (т.е. на экран коммандной строки). Знак двоеточия значит что cout(поток вывода) и endl(перевод строки) принадлежат пространству имен std.
DRFRIMEN вне форума Ответить с цитированием
Старый 15.10.2012, 13:59   #6
Lokomoss
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 17
По умолчанию

Программа не выдает ничего. Выписывает ,что нажмите любую клавишу и т.д., а потом просто вылетает без вывода какого-либо результата(
Lokomoss вне форума Ответить с цитированием
Старый 15.10.2012, 14:42   #7
DRFRIMEN
Пользователь
 
Регистрация: 09.10.2012
Сообщений: 15
По умолчанию

Если вы ничего не меняли в коде, то странно. Попробуйте вывести на экран через printf, так как делали раньше
DRFRIMEN вне форума Ответить с цитированием
Старый 15.10.2012, 21:18   #8
Lokomoss
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 17
По умолчанию

Возникло даже несколько проблем.
Первая ,я сделала так,чтобы она хоть что-то выдавала ,но она неправильно все считает,те ошибки где-то в самих функциях ,а еще она выдает default (((И надо было уточнить ,что все -таки мы компилируем не в с++,а просто в си в прогграмме putty или msys. не знаю,сыграет ли это что-нибудь
Код:
#include <stdio.h>
#include <stdlib.h>
void *k_strcpy(char* s1, const char* s2)
{
	while(*s1++ = *s2++);
	return s1;
}


char *mstrstr(char *s1, char *s2) {
	int i, j = 0;
	int inmatch = 0;
	char *first_symbol = NULL;
	int cur_symbol_s1 = 0;

	for (j; s2[j] != '\0'; j++) {
		for (i = cur_symbol_s1; s1[i] != '\0'; i++) {
			if (s1[i] == s2[j]) {
				if (inmatch == 0) {
					first_symbol = &s1[i];
					inmatch = 1;
				}
				cur_symbol_s1 = i + 1;
				break;
			}
			if (inmatch == 1 && s1[i] != s2[j]) {
				inmatch = 0;
				first_symbol = NULL;
				j = 0;
				break;
			}
		}
	}

	return first_symbol;
}




int k_strlen(const char *s)
{ 
	const char *p ;
	for (p=s;*p;++p);
	return (p - s );
}


int main (void){
	/*int k_strcpy(char* s1, const char* s2);
	char *mstrstr(char *s1, char *s2);
	int k_strlen(const char* s);*/
	char s[]="Hello kkk world!";
	char s1[]="Hello my dear son";
	char s2[]="Hello how are and world";
	*mstrstr(s1,s2);
	k_strcpy(s1,s2);
	k_strlen(s);
	printf("%s\n",s1);
	printf("%d\n",k_strlen(s));
	return 0;
}
Lokomoss вне форума Ответить с цитированием
Старый 15.10.2012, 21:24   #9
Lokomoss
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 17
По умолчанию

забавно ,запустила у себя тут на своем dev c++ выдал ответ ,правильный,-это только по длине строки,а вот копирование и вхождение неправильно делает(
Lokomoss вне форума Ответить с цитированием
Старый 15.10.2012, 21:51   #10
Lokomoss
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 17
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
void *k_strcpy(char* s1, const char* s2)
{
	while(*s1++ = *s2++);
	return s1;
}


char *mstrstr(char *s1, char *s2) {
	int i, j = 0;
	int inmatch = 0;
	char *first_symbol = NULL;
	int cur_symbol_s1 = 0;

	for (j; s2[j] != '\0'; j++) {
		for (i = cur_symbol_s1; s1[i] != '\0'; i++) {
			if (s1[i] == s2[j]) {
				if (inmatch == 0) {
					first_symbol = &s1[i];
					inmatch = 1;
				}
				cur_symbol_s1 = i + 1;
				break;
			}
			if (inmatch == 1 && s1[i] != s2[j]) {
				inmatch = 0;
				first_symbol = NULL;
				j = 0;
				break;
			}
		}
	}

	return first_symbol;
}




int k_strlen(const char *s)
{ 
	const char *p ;
	for (p=s;*p;++p);
	return (p - s );
}


int main (void){
	/*int k_strcpy(char* s1, const char* s2);
	char *mstrstr(char *s1, char *s2);
	int k_strlen(const char* s);*/
	char s[]="Hello kkk world!";
	char s1[100]="Hello my dear son";
	char s2[]="Hello";
	k_strcpy(s1,s2);
	printf("%s\n",k_strcpy(s1,s2));
    *mstrstr(s1,s2);
	printf("%d\n",*mstrstr(s1,s2));
	k_strlen(s);
	printf("%d\n",k_strlen(s));
	system("pause");
	return 0;
}

Последний раз редактировалось Lokomoss; 15.10.2012 в 21:54.
Lokomoss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тоже самое что и preg_match? kroŧ PHP 0 26.02.2011 15:23
strcpy(str, strlen(""), "") - error! nazavrik Общие вопросы C/C++ 2 09.02.2010 17:21
В С++ if (!f) это тоже самое что и if (f==0)? GaJIbI4 Помощь студентам 2 05.12.2009 17:37
strlen,strcpy,strcmp(Visual C++) crit Visual C++ 14 09.04.2009 19:10
снять все задачи - тоже самое что ctrl+alt+delete WOLFak Win Api 3 01.01.2008 16:38