• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

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

  • Автор темы vellasha
  • Дата начала
V

vellasha

Здравствуйте, код С++. Нужно в каждой строке текстового файла удалить самое короткое слово. Помогите пожалуйста, не знаю, как это построчно сделать, да и найти это короткое слово не получается. Вот, набросала только неправильно:
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();
}
 
R

rrrFer

не может совсем ничего не получаться.

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

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

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

vellasha

не может совсем ничего не получаться.

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

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

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

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

rrrFer

какую функцию?
все strlen и strtok - это стандартные функции, подключи <cstring> или <string.h>

Добавлено:
 
R

rrrFer

твой код ужасен.
if (A==' ') {
//...
while (A[i+2]!=' ') {
kb=kb+1;
i++;
}
}

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!