Удалить символы в строке, стоящие на четных местах; удалить лишние пробелы и знаки табуляции в строке, заменив одним пробелом - C (СИ)
Формулировка задачи:
Надо удалить символы в строке, стоящие на четных местах. И удалить лишние пробелы и знаки табуляции в строке, заменив одним пробелом. Есть код, но надо сделать то же самое через string.h. Как это заварить?
#include <stdio.h> int main(int argc, const char * argv[]) { while (1) { int a=1000,z,i=0; char s[a]; printf("Введите строку не более %d символов:\n",a); /*while (((z=getchar())!=EOF)&(z!='\n')) { s[i]=z; i++; } s[i]='\0'; */ gets(s); char ss[a]; i=0; int f=0,f2=0; for (int j=0; s[j]!='\0'; j++) { if ((s[j]!=' ')&(s[j]!='\t')) { f=1; if (f2==0) { ss[i]=s[j]; i++; f2=1; } else { f2=0; } } else { if (f==1) { ss[i]=' '; i++; f=0; f2=0; } else { f=0; f2=0; } } } if (ss[i-1]==' ') { ss[i-1]='\0'; } else { ss[i]='\0'; } /* for (int j=0; ss[j]!='\0'; j++) { putchar(ss[j]); } */ puts(ss); } return 0; }
Решение задачи: «Удалить символы в строке, стоящие на четных местах; удалить лишние пробелы и знаки табуляции в строке, заменив одним пробелом»
textual
Листинг программы
#include <stdio.h> #include <string.h> #define BUFF_SIZE 1000 int main( int argc, char **argv) { char buff[BUFF_SIZE]; char res[BUFF_SIZE]; puts( "enter string"); fgets( buff, BUFF_SIZE, stdin); // remove \t int tabCounter = 0; while( 1) { char *tabPos = strchr( buff, '\t'); if( tabPos == NULL) break; // табы кончились *tabPos = ' '; tabCounter++; } // while 1 printf( "tabs removed = %d\n", tabCounter); // удаляем четные символы for(int i = 1; i < strlen(buff); i++) memmove( buff+i, buff+i+1, strlen(buff+i)); // чистим от лишних пробелов memset( res, 0, BUFF_SIZE); for(int i = 0; i < strlen( buff); i++) { if( buff[i] != ' ') { char *end = strchr( buff+i, ' '); if( end == NULL) { strcat( res, buff+i); break; } // if end == null else { end++; strncat( res, buff+i, end-(buff+i)); i = end - buff - 1; } // else } // if letter } // for i < strlen(buff) puts( res); getchar(); return 0; } // main
Объяснение кода листинга программы
- В начале программы подключаются необходимые библиотеки: stdio.h и string.h.
- Определяется размер буфера в 1000 символов (переменная BUFF_SIZE).
- В функции main() объявляются две переменные типа char: buff и res. Первая используется для чтения строки из стандартного ввода, вторая - для хранения результата.
- В цикле while считывается строка из стандартного ввода до нажатия клавиши Enter.
- В первой части программы удаляются все символы табуляции из строки. Для этого используется функция strchr(), которая ищет первый символ табуляции в строке. Если такой символ найден, он заменяется на пробел. Процесс продолжается до тех пор, пока не будут найдены все символы табуляции.
- Во второй части программы удаляются все четные символы из строки. Для этого используется цикл for и функция memmove(), которая перемещает символы с нечетными индексами на позиции с четными индексами.
- В третьей части программы удаляются все лишние пробелы и знаки табуляции из строки. Для этого используется цикл for, который проходит по каждому символу строки. Если текущий символ не является пробелом, то он добавляется в результирующую строку. При этом проверяется, не является ли следующий символ пробелом (если это так, то он пропускается). Если текущий символ является последним символом в строке, то он также добавляется в результирующую строку.
- В конце программы выводится результирующая строка.
- Программа завершается после нажатия клавиши Enter.
- Возвращаемое значение функции main() равно 0, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д