В чём ошибка с указателем? (динамический массив, строки) - C (СИ)
Формулировка задачи:
Условие задачи:
Разделить символы из строки S1 на три группы: гласные, согласные, цифры. Группы разделить пробелами и отсортировать их по возрастанию.
Пока что пытаюсь выделить из строки гласные и согласные буквы латинского алфавита. При запуске программы в массиве появляются лишние непонятные символы, не могу понять в чём ошибка, помогите, пожалуйста.
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #include <malloc.h>
- #include <conio.h>
- int main()
- {
- const int N=255;
- int i,j,z, n=0;
- char s1[N];
- char*b;
- printf("Input string\n");
- gets(s1);
- puts(s1);
- printf("%d\n",strlen(s1));
- for (i=0;i<strlen(s1);i++)
- if(isalnum(s1[i]))
- {
- printf("%c",s1[i]);
- n++;
- }
- printf("\n");
- //printf("%d\n",n);
- b=(char*)malloc(n*sizeof(char));//b 0xcccccccc <Неправильный указатель> char *
- //b 0x00884350 "НННээээ««««««««ю" char * при вводе ert
- for (i=0,j=0;i<strlen(s1);i++)
- {
- if(isalnum(s1[i]))
- {
- b[j]=s1[i];
- j++;
- printf("\nmassiv b: %s",b);
- }
- }
- z=strlen(b);
- //printf("\nmassiv b: %s",b);
- if (!b)
- {
- printf("Error\n");
- getch();
- return 1;
- }
- printf("%d",z);
- printf("\n");
- for (i=0;i<z;i++)
- {
- if(b[i]=='a'||b[i]=='e'||b[i]=='y'||b[i]=='u'||b[i]=='i'||b[i]=='o')
- printf("%c",b[i]);
- }
- printf("\n");
- for (j=0;j<z;j++)
- {
- if(isalpha(b[j])&&b[j]!='a'&&b[j]!='e'&&b[j]!='y'&&b[j]!='u'&&b[j]!='i'&&b[j]!='o')
- printf("%c",b[j]);
- }
- printf("\n");
- free(b);
- return 0;
- }
Решение задачи: «В чём ошибка с указателем? (динамический массив, строки)»
textual
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #include <malloc.h>
- #include <conio.h>
- int main()
- {
- const int N=255;
- int i,j,z, n=0;
- char s1[N];
- char*b;
- printf("Input string\n");
- gets(s1);
- puts(s1);
- printf("%d\n",strlen(s1));
- for (i=0;i<strlen(s1);i++)
- if(isalnum(s1[i]))
- {
- printf("%c",s1[i]);
- n++;
- }
- printf("\n");
- //printf("%d\n",n);
- b=(char*)malloc(n*sizeof(char));//b 0xcccccccc <Неправильный указатель> char *
- //b 0x00884350 "НННээээ««««««««ю" char * при вводе ert
- for (i=0,j=0;i<strlen(s1);i++)
- {
- if(isalnum(s1[i]))
- {
- b[j]=s1[i];
- j++;
- printf("\nmassiv b: %s",b);
- }
- }
- z=strlen(b);
- //printf("\nmassiv b: %s",b);
- if (!b)
- {
- printf("Error\n");
- getch();
- return 1;
- }
- printf("%d",z);
- printf("\n");
- for (i=0;i<z;i++)
- {
- if(b[i]=='a'||b[i]=='e'||b[i]=='y'||b[i]=='u'||b[i]=='i'||b[i]=='o')
- printf("%c",b[i]);
- }
- printf("\n");
- for (j=0;j<z;j++)
- {
- if(isalpha(b[j])&&b[j]!='a'&&b[j]!='e'&&b[j]!='y'&&b[j]!='u'&&b[j]!='i'&&b[j]!='o')
- printf("%c",b[j]);
- }
- printf("\n");
- free(b);
- return 0;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д