Программа, удаляющая повторяющиеся пробелы и табуляции (работает некорректно) - 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;
}