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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2009, 20:15   #1
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию Обработка строки в С#/C++

Добрый вечер всем. Мне очень нужна помощь с одной программой. Алгоритм понятен, но проблемы с реализацией. Вводится строка из символов. Заканчивается - ** . Нужно среди всех слов найти двойные фамилии. Т.е., чтобы начиналось слово с заглавной буквы, затем сколько-то букв, затем знак -, затем опять с большой буквы "полуфамилия". Слова отделяются пробелами. Есть идея с флагами. 3 флага, первый отвечает за первую букву, второй за дефис, третий за вторую заглавную букву. Опыта их использования нет вообще. Может быть поможет кто? Хотя бы с флагами. Перебрать слова я представляю как. Спасибо заранее за любую помощь
HDMI вне форума Ответить с цитированием
Старый 22.09.2009, 09:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А вопрос такой: Подойдет реализация классами Borland C++?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.09.2009, 09:55   #3
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию

Смутно представляю как это осуществляется. Вообще, эту программу пишу в Qt3
HDMI вне форума Ответить с цитированием
Старый 22.09.2009, 11:10   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Лана, покажу как я бы это делал в моих традициях:
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 TStringList *l=new TStringList;
 l->DelimitedText=Edit1->Text;
 for (int i = 0; i < l->Count; i++) {
  AnsiString s=l->Strings[i];
  if (s.Pos("-")) {
	 ListBox1->Items->Add(s) ;
  }
 }
 delete l;
}
//---------------------------------------------------------------------------
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.09.2009, 20:10   #5
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию

Смог реализовать поиск двойных фамилий только по дефису... Нужна ваша помощь. Все-таки нужно искать по заглавным буквам и дефису. В Qt есть функция: isupper(символ); которая возвращает 1, если заглавная буква, и 0 если строчная. Помогите с этим, не совсем понимаю как совместить их.
Код:
#include <sstream>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <qdatetime.h>

int Form1::fam()
{
  QString t=textLabel3->text();
  using namespace std;
  string s1 = t;
  string s2 = "-";
  int df = 1;
  char ty = s2[0];
  istringstream ss(s1);
  s1.clear();
  while (ss >> s2 && s2 != "**")
    {
         if (count(s2.begin(), s2.end(), ty) == df)
        {
                (s2.begin(), s2.end());
                s1 += s2;
                s1 += ' ';
         }   
     } 
    textLabel2_2->setText(s1); 
    return 0; 
}
HDMI вне форума Ответить с цитированием
Старый 24.09.2009, 20:53   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну так например:
Код:
#include <iostream>
#include <string>
#include <sstream>

bool isrupper(char c)
{
	if( (c >= 'А') && (c <= 'Я') )
		return true;
	return false;
}

int main()
{
	std::istringstream ss("Первая-Вторая Фамилия Неправильная-фамилия Три Разных Фамилии Третья-Четвёртая ошибочная-Фамилия фамилия **");
	std::stringstream sss;
	std::string str;
	
	setlocale(LC_ALL, "Russian");
	while( (ss >> str) && (str != "**") ) {
		std::cout << str;
		if(isrupper(str[0])) {
			if(str.find('-') != std::string::npos) {
				if(isrupper(str[str.find('-')+1])) {
					std::cout << " VALID";
					sss << str << ' ';
				}
				else
					std::cout << " INVALID";
			}
			else
				std::cout << " VALID";
		}
		else
			std::cout << " INVALID";
		std::cout << std::endl;
	}

	std::cout << "\nДвойные фамилии:\n";
	while( sss >> str )
		std::cout << str << std::endl;

	return 0;
}
Ф-цию isrupper пришлось определить, потому что библиотечная isupper выдавала неправильные результаты )
netrino вне форума Ответить с цитированием
Старый 25.09.2009, 13:27   #7
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию

Спасибо большое У меня эта функция выдает правильные результаты. Еще один вопрос, как можно рассчитать общем оперативной памяти, который занимает эта программа?

Последний раз редактировалось HDMI; 25.09.2009 в 18:26.
HDMI вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10
обработка строки Bek Помощь студентам 1 27.02.2009 12:46
Обработка строки Staxxx Общие вопросы C/C++ 2 03.01.2009 12:30
Строки в Паскале Обработка текста quqer Помощь студентам 3 11.03.2008 11:22
Обработка XML строки при загрузке dbf в Delphi SereJa1020 БД в Delphi 1 18.12.2007 18:28