Здравствуйте.
Помогите выполнить задачу на С, компилятор Visual C
Дана строка состоящая из слов, разделённых пробелами, слова могут содержать заглавные буквы. Надо найти все такие слова которые состоят из тех же букв, что и первое слово (могут быть и другие быквы, но главное, чтобы присутствовали все буквы из первого). Заглавные буквы различаются со строчными ... вот так.
Прошу помочь в реализации
Друзья, ну помогите пожалуйста. Выполните как можите и как понимаете это условие.
С уважением.
Вот. 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;
}
Еще вриант ...
# 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;
}