Функция удаления пробелов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите с написанием функции для удаления первого пробела в строках, на картинке показано, и удаления пробелов перед знаками припинания. Заранее спасибо. вот код:
Листинг программы
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <locale.h>
  6. #define SIZE 5
  7. char *getStr();
  8. char ** work(char*);
  9. char *clear_probel(char *);
  10. int main() {
  11. setlocale(LC_ALL, ".1251");
  12. char *str=NULL,**result=NULL;
  13. int i;
  14. while (printf("Введите строку: \n"), str = getStr()){
  15. result=work(str);
  16. for (i=0; result[i]!=NULL; i++){
  17. //clear_probel(result[i]);
  18. //printf("i=%d\n", i);
  19. printf("Строкa: \n%s\n",result[i]);
  20. }
  21. }
  22. // system("pause");
  23. return 0;
  24. }
  25.  
  26. char *clear_probel(char *str) {
  27. char*newstr, *q;
  28. int i;
  29. unsigned long l;
  30. q=str;
  31. newstr=(char*)malloc(strlen(q)+1);
  32. strcpy(newstr, "");
  33. for (i=0; *(q+=strspn(q, " \t")); i++, q+=l) {
  34. l = strcspn(q, " \t");
  35. if (strlen(newstr))
  36. strcat(newstr, " ");
  37. strncat(newstr, q, l);
  38. }
  39. newstr = (char*)realloc(newstr, strlen(newstr) + 1);
  40. return newstr;
  41. }
  42. char ** work (char *str){
  43. int i,k;
  44. char *res, **result, *tmp, *p;
  45. res=clear_probel(str);
  46. result=(char**)malloc(sizeof(char*));
  47. result[0]=NULL;
  48. for (tmp=res, i=0; (p=strchr(tmp, '.'))!=NULL; i++, tmp=p+1){
  49. result=(char**)realloc(result, sizeof(char*)*(i+1));
  50. result[i]=(char*)malloc(p-tmp+2);
  51. strcpy(result[i], "");
  52. strncat(result[i], tmp, p-tmp+1);
  53. //if ((k=(strchr(result[i],' ')))==1){
  54. //}
  55. result[i+1]=NULL;
  56. }
  57. free(res);
  58. return result;
  59. }
  60.  
  61. char* getStr() {
  62. char *str = (char *)malloc(1);
  63. char buf[SIZE + 1];
  64. int n, len = 0;
  65. *str = '\0';
  66. do {
  67. n = scanf("%5[^\n]", buf, SIZE + 1);
  68. if (n < 0) {
  69. free(str);
  70. str = NULL;
  71. continue;
  72. }
  73. if (n == 0)
  74. scanf("%*c");
  75. else {
  76. len += strlen(buf);
  77. str = (char *)realloc(str, len + 1);
  78. strcat(str, buf);
  79. }
  80. } while (n > 0);
  81. return str;
  82. }

Решение задачи: «Функция удаления пробелов»

textual
Листинг программы
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <locale.h>
  7. #include <ctype.h>
  8.  
  9. #define SIZE 5
  10.  
  11. char *getStr();
  12. char ** work(char*);
  13. char *clear_probel(char *);
  14.  
  15. int main() {
  16.     setlocale(LC_ALL, ".1251");
  17.     char *str=NULL,**result=NULL;
  18.     int i;
  19.     while (printf("Введите строку: \n"), str = getStr()){
  20.         result=work(str);
  21.         for (i=0; result[i]!=NULL; i++){
  22.             //clear_probel(result[i]);
  23.             //printf("i=%d\n", i);
  24.             printf("Строкa: \n%s\n",result[i]);
  25.         }
  26.     }
  27. //  system("pause");
  28.     return 0;
  29. }
  30.  
  31.  
  32. char *clear_probel(char *str) {
  33.     char*newstr, *q;
  34.     int i;
  35.     unsigned long l;
  36.     q=str;
  37.     newstr=(char*)malloc(strlen(q)+1);
  38.     strcpy(newstr, "");
  39.     for (i=0; *(q+=strspn(q, " \t")); i++, q+=l) {
  40.         l = strcspn(q, " \t");
  41.         if (strlen(newstr))
  42.             strcat(newstr, " ");
  43.         strncat(newstr, q, l);
  44.     }
  45.     newstr = (char*)realloc(newstr, strlen(newstr) + 1);
  46.     return newstr;
  47. }
  48.  
  49. char ** work (char *str){
  50.     int i;
  51.     char *res, **result, *tmp, *p,*k,*j;
  52.     res=clear_probel(str);
  53.     result=(char**)malloc(sizeof(char*));
  54.     result[0]=NULL;
  55.     for (tmp=res, i=0; (p=strchr(tmp, '.'))!=NULL; i++, tmp=p+1){
  56.         result=(char**)realloc(result, sizeof(char*)*(i+1));
  57.         result[i]=(char*)malloc(p-tmp+2);
  58.         strcpy(result[i], "");
  59.         strncat(result[i], tmp, p-tmp+1);
  60.         if ((k=(strchr(result[i],' ')))==result[i]){
  61.             *result[i]++;
  62.         }
  63.         result[i+1]=NULL;
  64.      }
  65.     free(res);
  66.     return result;
  67. }
  68.  
  69.  
  70.  
  71.  
  72. char* getStr() {
  73.     char *str = (char *)malloc(1);
  74.     char buf[SIZE + 1];
  75.     int n, len = 0;
  76.     *str = '\0';
  77.     do {
  78.         n=scanf("%5[^\n]",buf,SIZE + 1);
  79.         if (n < 0) {
  80.             free(str);
  81.             str = NULL;
  82.             continue;
  83.         }
  84.         if (n == 0)
  85.             scanf("%*c");
  86.         else {
  87.             len += strlen(buf);
  88.             str = (char *)realloc(str, len + 1);
  89.             strcat(str, buf);
  90.         }
  91.     } while (n > 0);
  92.     return str;
  93. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы