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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2014, 18:29   #1
pascal009
 
Регистрация: 16.10.2014
Сообщений: 7
По умолчанию Вывести самое короткое слово строки

Есть некоторая строка. Нужно найти самое короткое слово и вывести его. Пытаюсь пока хотя бы просто найти длину минимального слова:
Код:
int _tmain(int argc, _TCHAR* argv[])
{
    
    char st[] ="Hello my world";
    
    int min = 255;
    int k = 0;
 
    for (int i = 0; i < strlen(st); i++)
    {
        if (st[i] != ' ')
            k = k + 1;
        else
        {
            if (k < min) min = k;
        }
    }
    
    printf("%d\n", min);
    
    return 0;
}
Должно вывести 2(длина "my"), но выводит 5. В чём ошибка и как правильно реализовать вывод короткого слова?
pascal009 вне форума Ответить с цитированием
Старый 23.12.2014, 19:03   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

обнулять k кто будет, когда к следующему слову переход?
pu4koff вне форума Ответить с цитированием
Старый 23.12.2014, 19:37   #3
pascal009
 
Регистрация: 16.10.2014
Сообщений: 7
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
обнулять k кто будет, когда к следующему слову переход?
Спасибо, а что подскажите на счет самого вывода короткого слова?
pascal009 вне форума Ответить с цитированием
Старый 23.12.2014, 20:18   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

заведите еще переменную в которую записывайте начало короткого слова.
Код:
if (st[i] != ' ')
{
  if (k == 0) // началось новое слово
    sk = i; // записываем начало текущего слова
  k = k + 1;
}
else
{
  if (k < min)
  {
    min = k;
    smin = sk;
  }
  k = 0;
}
выводить потом, соответственно, от символа smin до пробела.
Еще добавьте проверку на k == 0 к k < min, а то двойной пробел неправильно обработается, как мне кажется.
pu4koff вне форума Ответить с цитированием
Старый 23.12.2014, 21:23   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Просто оставлю как пример: http://www.programmersforum.ru/showthread.php?t=214478
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.01.2015, 22:15   #6
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

Код:
#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;
const int len = 100;
int main()
{
	setlocale(LC_ALL, "Rus");
	char s[len], str[len];
	int min = 1000;
	cout << "Введите строку: ";
	gets(s);
	for(char *p = strtok(s, " "); p; p = strtok(NULL, " "))
	{
		if(strlen(p) < min)
		{
			min = strlen(p);
			strcpy(str,p);
		}
	}
	cout << "\nСамое короткое слово: " << str;
	getch();
	return 0;
}
помог - жми на весы
Chainik! вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
самое короткое и самое длинное слово Evelin_18 Помощь студентам 2 10.12.2012 00:44
С# найти самое длинное и самое короткое слово в строке и вывести их Зеленый Чай Помощь студентам 4 06.01.2012 18:40
Задача на обработку строки: найти самое короткое слово и проверить в нём наличие заданного сочетания букв Черныш Иван Помощь студентам 5 05.06.2011 17:12
Строки. найти самое короткое слово. bratello41 Общие вопросы C/C++ 2 13.12.2010 23:30
заменить самое длинное слово, на самое короткое в Delphi сер4ей Помощь студентам 5 05.03.2009 18:40