Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Задача на Си

Автор: NIR 23.10.2006 18:08

Здравствуйте.
Помогите выполнить задачу на С, компилятор Visual C

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

Автор: Nucris 24.10.2006 3:50

Друзья, ну помогите пожалуйста. Выполните как можите и как понимаете это условие.
С уважением.

Автор: Michael_Rybak 24.10.2006 6:07

Вот. gcc не ругается. Вижуала нету. Пробуй компилить.

#include <stdio.h>

typedef __int64 CMask;

CMask ReadWordMask(char **s)
{
CMask res = 0;
for (; **s != ' ' && **s != 0; ++*s)
res |= (((CMask)1) << (**s - 'A'));
return res;
}

char s[1 << 20];
char *c, *c1;
CMask first = -1;

int main()
{
gets(s);

for (c1 = s, c = s; *c != 0; c = c1)
if (*c1 == ' ')
++c1;
else if (first == -1)
first = ReadWordMask(&c1);
else if ((ReadWordMask(&c1) & first) == first)
{
char t = *c1;
*c1 = 0;
printf("%s\n", c);
*c1 = t;
}

return 0;
}


Автор: klem4 24.10.2006 22:00

Еще вриант ...

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

int IsInclude(char *sub, char *s){
while ((*sub) && (strchr(s, *sub))) sub++;
return *sub == 0 ? 1 : 0;
}

char *s = new char[255], *first = new char[255], *p, *temp;
int i;

int main (void){

gets(s);
p = s;

while ((*p) && (*p == ' ')) p++;
for (i = 0; *p, *p != ' '; *(first + i++) = *p, p++);
*(first + i) = '\0';

while ( *p ) {
while ((*p) && (*p == ' ')) p++;
if ( *p ){
char *back = p;
while ((*p) && (*p != ' ')) p++;
temp = new char[p - back + 1];
memcpy(temp, back, p - back);
if (IsInclude(first, temp) == 1) puts(temp);
free(temp);
}
}
free(s);
free(first);
return 0;
}