В мире программирования на C fgets — популярная функция, используемая для чтения входных данных из файлового потока или стандартного ввода. Однако одной из распространенных проблем, с которыми сталкиваются программисты при использовании fgets, является наличие конечных пробелов в конце входной строки. Завершающие пробелы могут привести к неожиданному поведению, и их, возможно, придется удалить или обработать соответствующим образом. В этой статье мы рассмотрим несколько методов устранения конечных пробелов в fgets, приведя примеры кода для каждого метода.
Метод 1: использование strlen и цикла
Первый метод предполагает использование функции strlen для определения длины строки, считываемой fgets. При такой длине мы можем перебирать строку с конца и заменять все конечные пробелы нулевыми символами. Вот пример:
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
fgets(input, sizeof(input), stdin);
int len = strlen(input);
while (len > 0 && (input[len - 1] == ' ' || input[len - 1] == '\n')) {
input[len - 1] = '\0';
len--;
}
printf("Processed input: '%s'\n", input);
return 0;
}
Метод 2: использование strtok
Другой подход предполагает использование функции strtok для токенизации входной строки на основе пробельных символов. Перебирая полученные токены, мы можем восстановить строку без конечных пробелов. Вот пример:
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
fgets(input, sizeof(input), stdin);
char* token = strtok(input, " \n");
char result[100] = "";
while (token != NULL) {
strcat(result, token);
token = strtok(NULL, " \n");
if (token != NULL) {
strcat(result, " ");
}
}
printf("Processed input: '%s'\n", result);
return 0;
}
Метод 3: использование регулярных выражений
Если ваша программа имеет доступ к регулярным выражениям, вы можете использовать их для удаления конечных пробелов. Вот пример использования библиотеки PCRE:
#include <stdio.h>
#include <pcre.h>
int main() {
char input[100];
fgets(input, sizeof(input), stdin);
pcre* regex = pcre_compile("\\s+$", 0, NULL, NULL, NULL);
pcre_extra* regexExtra = pcre_study(regex, 0, NULL);
int result = pcre_exec(regex, regexExtra, input, strlen(input), 0, 0, NULL, 0);
if (result >= 0) {
input[result] = '\0';
}
printf("Processed input: '%s'\n", input);
return 0;
}
Конечные пробелы могут привести к неожиданному поведению при использовании fgets в программировании на C. В этой статье мы рассмотрели три различных метода устранения конечных пробелов в fgets, приведя примеры кода для каждого метода. Реализуя эти методы, вы можете гарантировать, что входные данные fgets не содержат конечных пробелов, и правильно обрабатывать их в своей программе.
Помните, что устранение конечных пробелов имеет решающее значение для поддержания целостности ваших программ на C при использовании fgets.