Помогите пожалуйста написать программу на с++
а) написать программу ввода текста с клавиатуры;
б) напечатать слова текста в алфавитном порядке. Слова печатать через один пробел, без точки.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
struct schar {
char buf[64];
schar(void){}
schar(const char* s) {
char* p = buf;
while((*p++ = *s++) != '\0');
}
inline operator char*(void) {
return buf;
}
static int pred_sort(const void* a, const void* b) {
return (tolower((*(schar*)a).buf[0]) < tolower((*(schar*)b).buf[0])) ? -1 : 1;
}
};
// разделение строки на слова
schar* split_words(const char* s, size_t& size) {
schar* arr = NULL;
size_t cnt = 0u;
for(const char* p = s; *p; ) { // подсчёт кол-во слов
if(isalpha(*p)) {
cnt++;
while(*p && isalpha(*p))
*p++;
} else
*p++;
}
if(cnt == 0u)
return NULL;
if((arr = new schar[cnt]) == NULL)
return NULL;
size = cnt;
schar b;
int n = 0;
for(const char* i = s; *i; *i++) { // разбивка строки на слова
if(isalpha(*i)) {
char* f;
for(f = b; *i && isalpha(*i); *f++ = *i++);
*f = '\0';
arr[n++] = b;
*i--;
}
}
// сортируем массив в алфавитном порядке не взирая на регистр символов
qsort((void*)arr, cnt, sizeof(schar), schar::pred_sort);
return arr;
}
int main(void)
{
char buf[255];
printf("enter str: ");
fgets(buf, sizeof(buf) - 1, stdin);
size_t size;
schar* arr = split_words(buf, size);
if(arr == NULL)
return 1;
for(size_t i = 0u; i < size; i++)
fprintf(stdout, "%s ", (char*)arr[i]);
delete[] arr;
getchar();
return 0;
}
#include <stdlib.h>
#include <ctype.h>
struct schar {
char buf[64];
schar(void){}
schar(const char* s) {
char* p = buf;
while((*p++ = *s++) != '\0');
}
inline operator char*(void) {
return buf;
}
static int pred_sort(const void* a, const void* b) {
return (tolower((*(schar*)a).buf[0]) < tolower((*(schar*)b).buf[0])) ? -1 : 1;
}
};
// разделение строки на слова
schar* split_words(const char* s, size_t& size) {
schar* arr = NULL;
size_t cnt = 0u;
for(const char* p = s; *p; ) { // подсчёт кол-во слов
if(isalpha(*p)) {
cnt++;
while(*p && isalpha(*p))
*p++;
} else
*p++;
}
if(cnt == 0u)
return NULL;
if((arr = new schar[cnt]) == NULL)
return NULL;
size = cnt;
schar b;
int n = 0;
for(const char* i = s; *i; *i++) { // разбивка строки на слова
if(isalpha(*i)) {
char* f;
for(f = b; *i && isalpha(*i); *f++ = *i++);
*f = '\0';
arr[n++] = b;
*i--;
}
}
// сортируем массив в алфавитном порядке не взирая на регистр символов
qsort((void*)arr, cnt, sizeof(schar), schar::pred_sort);
return arr;
}
int main(void)
{
char buf[255];
printf("enter str: ");
fgets(buf, sizeof(buf) - 1, stdin);
size_t size;
schar* arr = split_words(buf, size);
if(arr == NULL)
return 1;
for(size_t i = 0u; i < size; i++)
fprintf(stdout, "%s ", (char*)arr[i]);
delete[] arr;
getchar();
return 0;
}