Удалить Самое Короткое Слово В Каждой Строке

Тема в разделе "C/C++/C#", создана пользователем vellasha, 15 янв 2013.

  1. vellasha

    vellasha New Member

    Регистрация:
    15 янв 2013
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте, код С++. Нужно в каждой строке текстового файла удалить самое короткое слово. Помогите пожалуйста, не знаю, как это построчно сделать, да и найти это короткое слово не получается. Вот, набросала только неправильно:
    Код (C++):
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    void DeleteSl(char *A)
    {  
    int kb=0; int minkb=2999; int p=0;
    for(int i=0;i<strlen(A);i++)
    { if (A[i]==' ')
    { if (minkb>kb) { minkb=kb; p=i; }
    int kb=0;
    while (A[i+2]!=' ')
    { kb=kb+1;
    i++;
    }
    }
    }
    for(int j=p;j!=' ';j++)
    A[j]=' ';    
    }


    void txtfile(char *A)
    {
    FILE *f;
    int i=0;
    f=fopen("text.txt", "r");
    fgets(A, 3000, f);
    fclose(f);
    }

    void txtprint(char *A)
    {for(int i=0;i<strlen(A);i++)
    {
    printf("%c", A[i]);
    }
    printf("\n");
    }

    int main()
    {
    char A[3000];
    txtfile(A);
    printf("Original text:\n");
    txtprint( A);
    DeleteSl(A);
    printf("Text without short slovo:\n");
    txtprint(A);
    getch();
    }
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    не может совсем ничего не получаться.

    strlen даст тебе длину строки, тогда найти самое короткое слово не сложнее чем найти наименьший элемент массива.

    кроме того есть функции типы strtok, которыми ты легко сможешь разбить строку на слова.

    Судя по коду, считывать строки с файлы ты уже научился.
     
  3. vellasha

    vellasha New Member

    Регистрация:
    15 янв 2013
    Сообщения:
    2
    Симпатии:
    0
    не может совсем ничего не получаться.

    strlen даст тебе длину строки, тогда найти самое короткое слово не сложнее чем найти наименьший элемент массива.

    Я не понимаю, где у меня ошибка в DeleteSl ?? Вот не получается у меня найти самое короткое слово :p

    кроме того есть функции типы strtok, которыми ты легко сможешь разбить строку на слова.

    А можно пожалуйста поподробнее, как эту функцию реализовать в моей программе?
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
  5. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    твой код ужасен.

    если в конце строки стоит пробел - программа гарантированно упадет, потому что i - уже предпоследний символ. i+1 символ - это нуль-терминатор.
    i+2 символ содержит мусор, из цикла ты можешь очень долго не выйти (выйдешь когда в этом мусоре случайно встретится пробел)
     
Загрузка...

Поделиться этой страницей