Я написал эту программу, чтобы найти и распечатать самое длинное слово (непрерывная строка из [a-zA-Z]
символов), где строка является вводом пользователем.Код работает, но есть ошибка, если я введу какие-либо специальные символы, такие как '!'вывод выведет самое длинное слово вместе с некоторыми другими странными символами.Если я не буду вводить какие-либо специальные символы, программа будет работать так, как задумано.Я уверен, что это что-то простое, но я не смог понять, что является причиной этой ошибки.Также приветствуются любые методы улучшения кода.
Спасибо всем за потраченное время.
#include <stdio.h>
#include <string.h>
#define MAX_INPUT 1000
void LongestWord(char sen[]);
int main(void) {
char input[MAX_INPUT];
LongestWord(fgets(input, MAX_INPUT, stdin));
return 0;
}
void LongestWord(char sen[]) {
int i, current_len, longest_len, input_length;
input_length = strlen(sen);
char temp_string[input_length];
char longest_string[input_length];
current_len = longest_len = 0;
for (i = 0; i < input_length; i++) {
//If it is a letter
if ((sen[i] >= 97 && sen[i] <= 122) || (sen[i] >= 65 && sen[i] <= 90)) {
temp_string[current_len] = sen[i];
current_len++;
} else {
if (current_len > longest_len) {
//Clear longest string
memset(longest_string, 0, sizeof(longest_string));
//Copy temp_string to longest string
strcpy(longest_string, temp_string);
//set longest length equal to current
longest_len = current_len;
//Clear temp_string
memset(temp_string, 0, sizeof(temp_string));
}
current_len = 0;
}
}
printf("Longest string: %s\n", longest_string);
}