В чём ошибка с указателем? (динамический массив, строки) - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д