Задача на обработку строк символов, С++,

  • Автор темы -
  • Дата начала

Гость
#1
Проверьте пожалуйста - первое задание


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

2)Реализуйте один из быстрых алгоритмов поиска подстроки (Рабина-Карпа или Кнута-Морриса-Пратта).


вот что у меня получилось:

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content">
C++:
#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