Помогите решить ** языке СИ(С), не СИ++ Строка может содержать произвольное количество...

0 голосов
33 просмотров

Помогите решить на языке СИ(С), не СИ++

Строка может содержать произвольное количество пробелов и табуляций. Строке должно быть не более одного пробела между словами. В начале и в конце не должно быть пробелов,ни та табуляций.
пример:_\tABC_-_C---->АВС_С


Информатика (76 баллов) | 33 просмотров
Дан 1 ответ
0 голосов

#include #include #include #include
//Максимальная длина вводимой строки#define Mx_s 255
//Массив символов, которые //необходиом удалить в начале и конце строкиchar sim[] = { '\t', ' '};//Функция проверяющая входит ли данный символ c в массив simint char_in_arr(char c) {int f = 0;for (int i = 0; i < strlen(sim); i++) { if (c == sim[i]) { f = 1; break; }}return f;}

int main(){setlocale(LC_ALL, "rus");//Вводимая строкаchar s[Mx_s]; //Ввод данныхprintf("\n >> Введите строку\n <<");fgets(s, Mx_s, stdin);int l = strlen(s) - 1; //Переменные для определения отсечений в начале и конце строкиint pos_b = 0;int pos_e = l-1; //Проверяем начало строки//Если нам попадаются удаляемые символы то увеличиваем значение pos_bfor (;(pos_b < l) && char_in_arr(s[pos_b]); pos_b++) {}<br> //Проверяем конец строки//Если нам попадаются удаляемые символы то уменьшаем значение pos_efor (;(pos_e >= 0) && (char_in_arr(s[pos_e])); pos_e--) {}
//Длина отсеченного отрезкаint l2 = pos_e - pos_b + 1; //Если длина корректа тоif (l2 > 0) { //Строка для результата char s2[Mx_s];
//Идем по строке s1 int pos = 0; for (int i = pos_b, k_s = 0; i <= pos_e; i++) { //Считаем пробелы, идущие подряд if (s[i] == ' ') k_s++; else k_s = 0;<br> //Если это не подряд идущие пробел if (k_s < 2) { //записываем символ в s2 s2[pos] = s[i]; pos++; } } s2[pos] = '\0';
//Вывод результат printf("\n >> Результат\n <<"); fputs(s2,stdout);}else //Строка пуста/Содержит только символы из массива sim printf("\n >> Ошибка в строке\n");
system("pause>>void");return 0;}

(2.6k баллов)