Программа, удаляющая повторяющиеся пробелы и табуляции (работает некорректно) - C (СИ)
Формулировка задачи:
Прошу помощи и детального ( по возможности разбора полетов )
Программа выводит строки где больше 10 символов, удаляя при этом повторяющиеся знаки пробелов и табулиций.
С пробелами работает:
Однако как тока в условия дописываем знак табуляции прога перестает работать :
вот такое условие будет верным
#include <stdio.h> #define MAXLINE 10000 #define STR 10 int getstr(char line[], int maxline); main() { int len; // длина текущей строки char line [MAXLINE]; // текущая строка while ((len = getstr(line, MAXLINE)) > 0) if (len > STR){ for (int i = 0; i < MAXLINE; i++){ if ((line[i] == ' ') && (line[i+1] == ' ')){ for (int j = i; j < MAXLINE; j++) line[j] = line[j+1]; i--; } } printf ("%s \n", line); } return 0; } int getstr (char s[], int lim) { int c ,i; for (i = 0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; ++i ) s[i] = c; if(c == '\n'){ s[i] = c; ++i; } s[i] = '\0'; return i; }
#include <stdio.h> #define MAXLINE 10000 #define STR 10 int getstr(char line[], int maxline); main() { int len; // длина текущей строки char line [MAXLINE]; // текущая строка while ((len = getstr(line, MAXLINE)) > 0) if (len > STR){ for (int i = 0; i < MAXLINE; i++){ if ((line[i] == ' ' || '\t') && (line[i+1] == ' ' || '\t')){ for (int j = i; j < MAXLINE; j++) line[j] = line[j+1]; i--; } } printf ("%s \n", line); } return 0; } int getstr (char s[], int lim) { int c ,i; for (i = 0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; ++i ) s[i] = c; if(c == '\n'){ s[i] = c; ++i; } s[i] = '\0'; return i; }
понял ошибку впринципе тему можно закрыть
if ((line[i] == ' ') && (line[i+1] == ' ') || (line[i] == '\t') && (line[i+1] == '\t'))
только вот не могу понять как потом даже один символ табуляции превратить в пробел на выходе?
конструкция типо
if (line[i] == '\t')
line[i] = ' ';
чет не работает
Решение задачи: «Программа, удаляющая повторяющиеся пробелы и табуляции (работает некорректно)»
textual
Листинг программы
#include <stdio.h> #define MAXLINE 10000 #define STR 10 int getstr(char line[], int maxline); main() { int len; // длина текущей строки char line [MAXLINE]; // текущая строка while ((len = getstr(line, MAXLINE)) > 0) if (len > STR){ for (int i = 0; i < MAXLINE; i++){ if (line[i] == '\t'){ line[i] = ' '; --i; } if ((line[i] == ' ') && (line[i+1] == ' ')){ for (int j = i; j < MAXLINE; j++) line[j] = line[j+1]; i--; } } printf ("%s \n", line); } return 0; } int getstr (char s[], int lim) { int c ,i; for (i = 0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; ++i ) s[i] = c; if(c == '\n'){ s[i] = c; ++i; } s[i] = '\0'; return i; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д