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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2010, 19:25   #1
Беата
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 29
По умолчанию Строки, С++

кто поможет сделать лабораторную?

1) Обработка исходной строки. Задана строка символов, состоящая из слов, разделенных символами «пробел». При этом между двумя словами может находиться более одного символа-разделителя. Также символы-разделители могут находиться в начале и/или конце строки. Слова состоят из букв латинского алфавита.

Необходимо определить количество слов, входящих в строку (этот алгоритм реализуется в виде отдельной функции). Затем необходимо создать новый массив строк, элементы которого содержат слова данной строки и массив целых чисел, первый элемент которого содержит количество разделительных символов, стоящих перед первым словом, второй элемент – количество таких символов перед вторым словом и т.д. Последний элемент этого массива должен содержать количество разделительных символов, стоящих в строке между концом последнего слова и концом строки (для реализации этого алгоритма необходимо модифицировать функцию разбиения строки на слова, приведенную в рабочем материале).

2) Реализуйте один из быстрых алгоритмов поиска подстроки (Рабина-Карпа или Кнута-Морриса-Пратта).
Беата вне форума Ответить с цитированием
Старый 07.04.2010, 08:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

с динамическими массивами в Си я не очень дружу, но в принципе может тебе поможет вот такой пример
Код:
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>

char s[255]="Hello  my world"; 

int WordsDontComeEasy(char *ss){
	int k=0;
	for(int i=0;i<=strlen(ss);i++){k+=( (ss[i]==' ')&&(ss[i+1]!=' ') )?1:0;}
	return ++k;
}

void cpy(char *ss, int wnum, char *t){
    int i=0;
	for(;(i<=strlen(ss))&&(wnum>0);i++){ if( (ss[i]==' ')&&(ss[i+1]!=' ') ){--wnum;}}
	printf("%d\t",i);
	int k;
	for(k=0;(i<=strlen(ss))&&(ss[i]!=' ');i++,k++){
		t[k]=ss[i];
    }
	t[k]=0;
}

int _tmain(int argc, _TCHAR* argv[])
{
	int k=WordsDontComeEasy(s);
	char **a= new char*[k];
	printf("%s - Words Count= %d\n",s,k);
	for(int i=0;i<k;i++){
	 a[i]=new char[255];
     cpy(s,i,a[i]);
	}
	printf("\n");
	for(int i=0;i<k;i++){
		printf("%s\n",a[i]);
	}

	getchar();
	return 0;
}
Вот результ:
Цитата:
Hello my world - Words Count= 3
0 7 10
Hello
my
world
I'm learning to live...

Последний раз редактировалось Stilet; 07.04.2010 в 08:36.
Stilet вне форума Ответить с цитированием
Старый 07.04.2010, 12:56   #3
Беата
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
с динамическими массивами в Си я не очень дружу, но в принципе может тебе поможет вот такой пример
Код:
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>

char s[255]="Hello  my world"; 

int WordsDontComeEasy(char *ss){
	int k=0;
	for(int i=0;i<=strlen(ss);i++){k+=( (ss[i]==' ')&&(ss[i+1]!=' ') )?1:0;}
	return ++k;
}

void cpy(char *ss, int wnum, char *t){
    int i=0;
	for(;(i<=strlen(ss))&&(wnum>0);i++){ if( (ss[i]==' ')&&(ss[i+1]!=' ') ){--wnum;}}
	printf("%d\t",i);
	int k;
	for(k=0;(i<=strlen(ss))&&(ss[i]!=' ');i++,k++){
		t[k]=ss[i];
    }
	t[k]=0;
}

int _tmain(int argc, _TCHAR* argv[])
{
	int k=WordsDontComeEasy(s);
	char **a= new char*[k];
	printf("%s - Words Count= %d\n",s,k);
	for(int i=0;i<k;i++){
	 a[i]=new char[255];
     cpy(s,i,a[i]);
	}
	printf("\n");
	for(int i=0;i<k;i++){
		printf("%s\n",a[i]);
	}

	getchar();
	return 0;
}
Вот результ:


Ой спасибо огромное. то есть вы мне решили да?
Беата вне форума Ответить с цитированием
Старый 07.04.2010, 12:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Беата
Я тебе показал в каком направлении двигаться, я не решал всю задачу, потому что неинтересная она, да и Си я знаю не так хорошо.
Но по крайней мере тут есть функция разбивки строки на слова в массив.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2010, 13:05   #5
Беата
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я тебе показал в каком направлении двигаться, я не решал всю задачу, потому что неинтересная она, да и Си я знаю не так хорошо.
Но по крайней мере тут есть функция разбивки строки на слова в массив.
спасибо!
Беата вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки - сдвиг строки в право[C++] ArniLand Общие вопросы C/C++ 1 06.04.2010 15:47
Удаление элементов строки s2 из строки s1 Ueshua Общие вопросы C/C++ 4 20.12.2009 13:06
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10
Строки. Как вывести часть строки? Anfall Общие вопросы Delphi 7 26.02.2009 09:10
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27