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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2012, 19:37   #1
Prin53
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 59
По умолчанию Строки.

Задача.
Цитата:
Определить минимальное количество первых символов, по которым можно различать слова с заданного текста.
Помогите, пожалуйста.
Prin53 вне форума Ответить с цитированием
Старый 11.05.2012, 21:11   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хы... А в жизни это как делать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2012, 22:43   #3
alezha
Форумчанин
 
Регистрация: 16.04.2011
Сообщений: 126
По умолчанию

типо Т9 написать, только для ПК?
А че повторно тему создаем?
http://www.programmersforum.ru/showthread.php?t=199691

Последний раз редактировалось alezha; 12.05.2012 в 22:53.
alezha вне форума Ответить с цитированием
Старый 13.05.2012, 10:41   #4
Prin53
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 59
По умолчанию

Цитата:
Сообщение от alezha Посмотреть сообщение
типо Т9 написать, только для ПК?
А че повторно тему создаем?
http://www.programmersforum.ru/showthread.php?t=199691
Случайно, прошу прощения.
Нет, нужно выяснить по скольким первым буквам можно отличить слова. К примеру "Left Leas Lost" отличаются по 3м первым буквам.

Вот что я написал:
Цитата:
#include <iostream>
using namespace std;

int main()
{
int k = 1;
char s [201];
cin.getline(s,200);
string s2;
s2=s;
char letter = s2[1];
for (int i = 0;i <= s2.length();i++)
if (s2[i]==' ')
{
if (letter == s2[i+k])
k++;
else

}
cout<<k;
return 0;
}
Нужно что то в else предпринять, подскажите.
Prin53 вне форума Ответить с цитированием
Старый 13.05.2012, 11:13   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
"Left Leas Lost" отличаются по 3м первым буквам.
Это еще чего? Leas отличается окончанием.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2012, 11:35   #6
Prin53
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 59
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это еще чего? Leas отличается окончанием.
Ну как сказать же. По ПЕРВЫМ буквам. Окончания не имеют значения.
Prin53 вне форума Ответить с цитированием
Старый 13.05.2012, 11:49   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ладно. Задача теперь ясна.
Следующий вопрос: Как слова вводишь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2012, 11:50   #8
Prin53
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 59
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ладно. Задача теперь ясна.
Следующий вопрос: Как слова вводишь?
Слова ввожу через пробел, строкой.
Цитата:
cin.getline(s,200);
, Enter - конец ввода по умолчанию.
Prin53 вне форума Ответить с цитированием
Старый 13.05.2012, 12:53   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ок. Предлагаю такую схему:
Код:
// hh.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include<iostream>
#include<string>
#include<stdlib.h>
#include <vector>

using namespace std;

vector<string> vs;
vector<string>::iterator vi;

void split(string s){
	vs.clear();
	basic_string <char>::iterator i,j;
	for( i=s.begin();i!=s.end();i++){
		string q="";
		for( j=i;j!=s.end() && *j!=' ';j++) q+=*j;	
		vs.push_back(q);
		for( ;j!=s.end() && *j==' ';j++);
		i=--j;

	}
}

int analize(){
	int k=9999;
	for(vi=vs.begin();vi!=--vs.end();){
			string q=*vi,w=*++vi;
			int mx=0;
			for(int i=0;i<q.length() && i<w.length() && q[i]==w[i];i++) {
				mx++;
				//cout<<q[i]<<w[i];
			}
			//cout<<'\n';
			k=(k>mx)?mx:k;
	}
	return k;
}

int _tmain(int argc, _TCHAR* argv[])
{
   string s="Left Leas Lest";
   split(s);
   
   for(vi=vs.begin();vi!=vs.end();vi++){cout<<*vi<<'\n';}
   
   cout<<'\n'<<analize()<<'\n';

   system("pause");
   return 0;
}
Split делит на вектор строк по пробелу
Analize выясняет совпадения
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2012, 13:00   #10
Prin53
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 59
По умолчанию

Ошибка вот тут:
Цитата:
for(vi=vs.begin();vi!=--vs.end()
Что значат выражения
Цитата:
!=--
Цитата:
=*++
, объясните, если можно.

И еще такой вопрос, можно ли обойтись без Vector? Я ее не изучал еще.
Prin53 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Сделать в гриде строки выше, чтобы не растягивать строки до бесконечности kris__tina БД в Delphi 1 09.06.2011 15:31
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10