Задать вопрос
nd0ut
@nd0ut

Найти минимальную длину слова на C

Запоролся на простой задаче.
На вход подается txt со строкой (до 200 символов), необходимо найти минимальную длину слова в этой строке. За слово считается последовательность английских букв (вот тут вопрос, последовательностью ведь не может быть одиночный символ?).

Наваял по-быстрому следующее:
#include "stdafx.h"
#include <stdio.h>

int main()
{
freopen("input.txt","r",stdin);

char c;
int n = 0;
int min = 1000;

while (scanf("%c", &c) == 1)
{
if(isalpha©)
n++;
else
{
if(n<min && n>1)
min=n;
n=0;
}
}
printf("%d", min);
fclose (stdin);

return 0;
}

Обычное предложение типа «Hello, the world!» считает нормально (the специально добавил). Однако если строка начинается не с буквы, или заканчивается буквой, или ещё какая-нибудь неестественная фигня, то считается криво. А надо, чтоб считались все последовательности, в независимости от их местонахождения.
  • Вопрос задан
  • 4031 просмотр
Подписаться 2 Оценить Комментировать
Решения вопроса 1
frol
@frol
Линуксоид
Не смог воспроизвести ошибки «считается криво»:

#include <stdio.h>
#include <ctype.h>
 
int main()
{
    freopen("input.txt","r",stdin);
    
    char c;
    int n = 0;
    int min = 1000;
    
    while (scanf("%c", &c) == 1)
    {
        if(isalpha©)
            n++;
        else
        {
            if(n<min && n>1)
                min=n;
            n=0;
        }
    }
    printf("%d", min);
    fclose (stdin);
         
    return 0;
}


[frol:~]$ cat input.txt; c++ qq.c -o qq; ./qq
_Hello worldq
5
[frol:~]$ cat input.txt; c++ qq.c -o qq; ./qq
Hello worldq
5
[frol:~]$ cat input.txt; c++ qq.c -o qq; ./qq
Hello, worldq
5
[frol:~]$ cat input.txt; c++ qq.c -o qq; ./qq
Hello, the worldq
3
[frol:~]$ cat input.txt; c++ qq.c -o qq; ./qq
Hello, the world!
3
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@nuclear
А где здесь C++?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы