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

vellasha

New member
15.01.2013
2
0
#1
Здравствуйте, код С++. Нужно в каждой строке текстового файла удалить самое короткое слово. Помогите пожалуйста, не знаю, как это построчно сделать, да и найти это короткое слово не получается. Вот, набросала только неправильно:
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

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

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

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

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

vellasha

New member
15.01.2013
2
0
#3
не может совсем ничего не получаться.

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

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

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

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

rrrFer

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

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