Ввести n строк, найти самую короткую и самую длинную строки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Ввести n строк , найти самую короткую и самую длинную строки. Вывести найденные строки и их длину. Ввод осуществить как аргументы командной строки. Написал такой код, но он не верно работает, под виндоус выдает 1 и виснет, а на линуксе просто не верно считает...
#include <stdio.h>
#include <string.h>
 
void main(int argc, char *argv[])
{
    int i,j,f=1,w=1; char str[10]; /*f - число повторений. w - номер необходимого аргумента*/
    for (j=1;j<argc;j++)
    {  
        strncat(str, argv[j],strlen(argv[j])); 
        for (i=1;i<strlen(argv[j]);i++)
        {   
            if (str[i]>str[i-1])
            {
                ++f; 
        }
        }    
             printf("f= %d",f);
             printf("\n");
            if (f==strlen(argv[j]))
            {
                 w=j; 
            }
            f=1;
    } 
    printf("%d",strlen(argv[w]));
    printf("\n");
    strncat(str, argv[w],strlen(argv[w]));
    for (i=0;i<strlen(argv[w]);i++)
    {
        printf("%c",str[i]);
    }
    printf("\n");
}

Решение задачи: «Ввести n строк, найти самую короткую и самую длинную строки»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(int argc, char* argv[])
{
    if ( argc < 2 )
    {
        fprintf(stderr, "%s:Error arg\n", argv[0]);
        exit(1);
    }
    else
    {
        char *min = argv[1], *max = argv[1];
        size_t i;
        for ( i = 2 ; i < argc ; ++i )
            if ( strlen(min) > strlen(argv[i]) )
                min = argv[i];
            else
                if ( strlen(max) < strlen(argv[i]) )
                    max = argv[i];
        printf("Max : %s \t Min : %s\n", max, min);
    }
    return 0;
}

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы