Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2010, 20:50   #1
Ramil90
 
Регистрация: 12.11.2010
Сообщений: 4
По умолчанию Нужна прога на C

Написать программу поиска слова минимальной длины. Множество слов представляется в виде строки символов заданного размера. Слова разделены символом пробел.

есть прога, но она ищет максимально длинное слово.
нужно вот ее изменить. а как, ума не хватает. Что только не пробовал.
Код:
char str[]="стиль общения в существенной мере определяет эффективность перераспределения обучения";
int i=0,j=0,l=0,q;
char *p;

main()
{
   SetConsoleOutputCP(1251);
   printf("Нахождение самого длинного слова в строке.\n");
   printf("Строка: %s\n",str);
    while (str[i]!='\0')
         {
          if(str[i]==' '&&str[i]!=str[i+1]&&str[i+1]!='\0') j=0;
          i++,j++;
          if (l<j) l=j ,q=i;
         }
    printf("Слово:  ");
    p=&str[q-l];
    for(j=1;j<=l;j++) printf("%c",*(p+j));
    printf("\nНажмите любую клавишу");
    getch();
    return 0;
}
Ramil90 вне форума Ответить с цитированием
Старый 13.11.2010, 09:19   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Находит самое короткое слово в строке. Если таких слов несколько выводит только первое.

Код:

char str[]="стиль общения в существенной мере определяет эффективность перераспределения обучения";
int i=0,j=0,l=0,q,start,len;
char *p;

main()
{
   SetConsoleOutputCP(1251);
   printf("Нахождение самого длинного слова в строке.\n");
   printf("Строка: %s\n",str);
   l=strlen(str);
   start = i;q=i;
   do
   {
    while (str[i] != ' ' && str[i] != '\0')
    {
     j++;i++;
    }
    if (j<l) {q=start;len=j;l=j;j=0;}
    i++;
    start = i;
   }
   while (str[i] != '\0');


   printf("Слово:  ");
   for(i=q;i<q+len;i++)
    {printf("%c",str[i]);}
   printf("\nНажмите любую клавишу");
   getch();
   return 0;
}
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 13.11.2010, 12:31   #3
Ramil90
 
Регистрация: 12.11.2010
Сообщений: 4
По умолчанию

вариант конечно не плохой, но к сожалению не совсем то! в предложении он выделяется слово "стиль" хотя есть более короткие слова.
Ramil90 вне форума Ответить с цитированием
Старый 13.11.2010, 12:55   #4
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Цитата:
вариант конечно не плохой
неуместная тактичность Вариант именно - плохой, потому что не работает!


Действительно закралась ошибка, потому что тестировал на другой входной строке. Поправил. Теперь работает правильно.

Код:
char str[]="стиль общения в существенной мере определяет эффективность перераспределения обучения";
int i=0,j=0,l=0,q,start,len;
char *p;

main()
{
   SetConsoleOutputCP(1251);
   printf("Нахождение самого длинного слова в строке.\n");
   printf("Строка: %s\n",str);
   l=strlen(str);
   start = i;q=i;
   do
   {
    while (str[i] != ' ' && str[i] != '\0')
    {
     j++;i++;
    }
    if (j<l) {q=start;len=j;l=j;}
    i++;j=0;
    start = i;
   }
   while (str[i] != '\0');


   printf("Слово:  ");
   for(i=q;i<q+len;i++)
    {printf("%c",str[i]);}
   printf("\nНажмите любую клавишу");
   getch();
   return 0;
}
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 13.11.2010, 12:59   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
// ееее.cpp: определяет точку входа для консольного приложения.
//Разбивка строки на слова 

#include "stdafx.h"
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	string s="Hello my world";
	string a[100];
	int cnt=0;
	for(int i=0;i<s.length();i++)		a[cnt+=(s[i]==' ')?1:0]+=s[i];
	for(int i=0;i<=cnt;i++){printf("%s\n",a[i].c_str());};
	getchar();
	return 0;
}
Идея понятна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2010, 13:23   #6
Ramil90
 
Регистрация: 12.11.2010
Сообщений: 4
По умолчанию

Stilet, суть ясна всем спасибо за помощь. Тему можно закрывать.
Ramil90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна прога юрий- Софт 0 22.09.2010 22:07
нужна прога Marija17 Помощь студентам 5 14.06.2010 11:04
Нужна прога MasterX Софт 5 10.03.2009 09:28
Нужна прога ce-zar Фриланс 2 21.05.2008 14:40
нужна прога verto Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 06.01.2007 14:31