Функция удаления пробелов - C (СИ)
Формулировка задачи:
Помогите с написанием функции для удаления первого пробела в строках, на картинке показано, и удаления пробелов перед знаками припинания. Заранее спасибо.
вот код:
Листинг программы
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <locale.h>
- #define SIZE 5
- char *getStr();
- char ** work(char*);
- char *clear_probel(char *);
- int main() {
- setlocale(LC_ALL, ".1251");
- char *str=NULL,**result=NULL;
- int i;
- while (printf("Введите строку: \n"), str = getStr()){
- result=work(str);
- for (i=0; result[i]!=NULL; i++){
- //clear_probel(result[i]);
- //printf("i=%d\n", i);
- printf("Строкa: \n%s\n",result[i]);
- }
- }
- // system("pause");
- return 0;
- }
- char *clear_probel(char *str) {
- char*newstr, *q;
- int i;
- unsigned long l;
- q=str;
- newstr=(char*)malloc(strlen(q)+1);
- strcpy(newstr, "");
- for (i=0; *(q+=strspn(q, " \t")); i++, q+=l) {
- l = strcspn(q, " \t");
- if (strlen(newstr))
- strcat(newstr, " ");
- strncat(newstr, q, l);
- }
- newstr = (char*)realloc(newstr, strlen(newstr) + 1);
- return newstr;
- }
- char ** work (char *str){
- int i,k;
- char *res, **result, *tmp, *p;
- res=clear_probel(str);
- result=(char**)malloc(sizeof(char*));
- result[0]=NULL;
- for (tmp=res, i=0; (p=strchr(tmp, '.'))!=NULL; i++, tmp=p+1){
- result=(char**)realloc(result, sizeof(char*)*(i+1));
- result[i]=(char*)malloc(p-tmp+2);
- strcpy(result[i], "");
- strncat(result[i], tmp, p-tmp+1);
- //if ((k=(strchr(result[i],' ')))==1){
- //}
- result[i+1]=NULL;
- }
- free(res);
- return result;
- }
- char* getStr() {
- char *str = (char *)malloc(1);
- char buf[SIZE + 1];
- int n, len = 0;
- *str = '\0';
- do {
- n = scanf("%5[^\n]", buf, SIZE + 1);
- if (n < 0) {
- free(str);
- str = NULL;
- continue;
- }
- if (n == 0)
- scanf("%*c");
- else {
- len += strlen(buf);
- str = (char *)realloc(str, len + 1);
- strcat(str, buf);
- }
- } while (n > 0);
- return str;
- }
Решение задачи: «Функция удаления пробелов»
textual
Листинг программы
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <locale.h>
- #include <ctype.h>
- #define SIZE 5
- char *getStr();
- char ** work(char*);
- char *clear_probel(char *);
- int main() {
- setlocale(LC_ALL, ".1251");
- char *str=NULL,**result=NULL;
- int i;
- while (printf("Введите строку: \n"), str = getStr()){
- result=work(str);
- for (i=0; result[i]!=NULL; i++){
- //clear_probel(result[i]);
- //printf("i=%d\n", i);
- printf("Строкa: \n%s\n",result[i]);
- }
- }
- // system("pause");
- return 0;
- }
- char *clear_probel(char *str) {
- char*newstr, *q;
- int i;
- unsigned long l;
- q=str;
- newstr=(char*)malloc(strlen(q)+1);
- strcpy(newstr, "");
- for (i=0; *(q+=strspn(q, " \t")); i++, q+=l) {
- l = strcspn(q, " \t");
- if (strlen(newstr))
- strcat(newstr, " ");
- strncat(newstr, q, l);
- }
- newstr = (char*)realloc(newstr, strlen(newstr) + 1);
- return newstr;
- }
- char ** work (char *str){
- int i;
- char *res, **result, *tmp, *p,*k,*j;
- res=clear_probel(str);
- result=(char**)malloc(sizeof(char*));
- result[0]=NULL;
- for (tmp=res, i=0; (p=strchr(tmp, '.'))!=NULL; i++, tmp=p+1){
- result=(char**)realloc(result, sizeof(char*)*(i+1));
- result[i]=(char*)malloc(p-tmp+2);
- strcpy(result[i], "");
- strncat(result[i], tmp, p-tmp+1);
- if ((k=(strchr(result[i],' ')))==result[i]){
- *result[i]++;
- }
- result[i+1]=NULL;
- }
- free(res);
- return result;
- }
- char* getStr() {
- char *str = (char *)malloc(1);
- char buf[SIZE + 1];
- int n, len = 0;
- *str = '\0';
- do {
- n=scanf("%5[^\n]",buf,SIZE + 1);
- if (n < 0) {
- free(str);
- str = NULL;
- continue;
- }
- if (n == 0)
- scanf("%*c");
- else {
- len += strlen(buf);
- str = (char *)realloc(str, len + 1);
- strcat(str, buf);
- }
- } while (n > 0);
- return str;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д