ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #2111  
Старый 27.12.2009, 00:03
STIFFmaster
Новичок
Регистрация: 12.12.2009
Сообщений: 10
Провел на форуме:
14658

Репутация: 0
По умолчанию

В програме должно выводить сколько раз встречается подстрока в строке.
 
Ответить с цитированием

  #2112  
Старый 27.12.2009, 00:59
043nKRuT0y
Участник форума
Регистрация: 31.10.2007
Сообщений: 213
Провел на форуме:
394522

Репутация: 14
По умолчанию

дык - так просто такую проверку добавь:
Код:
if(ch == strlen(podstroka)){
         kol_podstrok ++;
         ch = 0;
}
То есть если количество совпадений без прерывно равно длине подстроки значить ето она , и мы увеличиваем счетчик подстрок, и обнуляем счетчик совпадений дабы заново искать подстроку....
 
Ответить с цитированием

  #2113  
Старый 27.12.2009, 11:35
ss88
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме:
298300

Репутация: 128
Отправить сообщение для ss88 с помощью ICQ
По умолчанию

Цитата:
Сообщение от elusive.light  
PLS помогите решить задачу реально сам не могу справиться. Мне её в понедельник надо сдать(28.12.09). Заранее очень благодарен

В киоске продается растворимый кофе, предлагается ассортимент из трех известных кофейных торговых марок (названия на ваш выбор), а также варианты приготовления – полный стакан / половина стакана, от 0 до 2 ложек сахара. Сделайте объявление структуры данных, моделирующей заказ кофе. При этом для кода торговой марки обязательно применить конструкцию enum, а информацию о количестве воды и ложек сахара следует запаковать при помощи битовых полей в один байт. Нужно составить тестовую программу, использующую такую структуру.
Какой язык?

Вот тебе на Сях
Код:
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

typedef enum {JACOBS, NESCAFE, TCHIBO} trade_mark_t;

const char* sugar_msgs[] = {"без","с одной ложечкой","с двумя ложечками"};

const char* water_msgs[] = {"стаканчик","половина стаканчика"};
const char* trademark_msgs[] = {"JACOBS", "NESCAFE", "TCHIBO"};

/* Структура заказа стаканчика кофе */
typedef struct {
	
	/* Торговая марка */
	trade_mark_t tm;
	
	/* битовое поле сахара и воды
	 * 0x00 - полный стакан без сахара 
	 * 0x01 - полстакана без сахара
	 * 0x11 - полстакана с одной ложкой сахара
	 * 0x21 - полстакана с двумя ложками сахара*/
	uint8_t sugar_water;
	
} request_for_coffee_t;

void check_correct(int have, int max);

int main(int argc, char** argv)
{
	request_for_coffee_t request;
	int sugar, water, tm;
	
	(void) printf("Какой марки кофе вы жаждете?\n");
	(void) printf("[0] JACOBS\n[1] NESCAFE\n[2] TCHIBO\n");
	(void) scanf("%d",&tm);
	check_correct(tm,2);
	
	(void) printf("Сколько сахара?\n");
	(void) printf("[0] без сахара\n[1] одна ложечка\n[2] две ложечки\n");
	(void) scanf("%d",&sugar);
	check_correct(sugar,2);
	
	(void) printf("Дозировка\n");
	(void) printf("[0] стаканчик\n[1] половина стаканчика\n");
	(void) scanf("%d", &water);
	check_correct(water,1);
	
	request.tm = tm;
	request.sugar_water = sugar;
	request.sugar_water <<= 4;
	request.sugar_water |= water;
	
	(void) printf("Вы заказали:\n");
	(void) printf("%s ",water_msgs[request.sugar_water & 0x0F]);
	(void) printf("%s\n",trademark_msgs[request.tm]);
	(void) printf("%s сахара\n",sugar_msgs[request.sugar_water>>4]);
	(void) printf("Спасибо, до свиданья!\n");
	
	return 0;
}

void check_correct(int have, int max) {
	if(have >= 0 && have <=max)
		return;
	else {
		fprintf(stderr, "Нет таких кнопок на кофейном автомате :)\n");
		exit(1);
	}
}

Последний раз редактировалось ss88; 27.12.2009 в 12:34..
 
Ответить с цитированием

  #2114  
Старый 27.12.2009, 13:27
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

Цитата:
Сообщение от 043nKRuT0y  
дык - так просто такую проверку добавь:
Код:
if(ch == strlen(podstroka)){
         kol_podstrok ++;
         ch = 0;
}
То есть если количество совпадений без прерывно равно длине подстроки значить ето она , и мы увеличиваем счетчик подстрок, и обнуляем счетчик совпадений дабы заново искать подстроку....
У тебя не ищется подстрока. у тебя считется число совпадающих символов в двух строках.
 
Ответить с цитированием

  #2115  
Старый 27.12.2009, 14:23
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

ss88 - http://en.wikipedia.org/wiki/Bit_field
 
Ответить с цитированием

  #2116  
Старый 27.12.2009, 15:45
serg1991
Новичок
Регистрация: 23.08.2006
Сообщений: 1
Провел на форуме:
73653

Репутация: 0
По умолчанию

Помогите пожалуйста, скоро зачет, а массивы для меня - темный лес. К четвергу все задачи надо прорешать, помогите хотя бы несколько сделать.
Условия по ссылке
http://narod.ru/disk/16374301000/zachet.doc.html
 
Ответить с цитированием

  #2117  
Старый 27.12.2009, 16:55
Retimiled
Banned
Регистрация: 24.12.2009
Сообщений: 141
Провел на форуме:
487460

Репутация: 45
По умолчанию

Цитата:
Сообщение от STIFFmaster  
помогите с лабораторной. Нужно осуществить поиск подстроки в строке без использования функций.
я пробовал так:
Код:
#include <iostream.h>  
void main()  
{
  	char stroka[30];
  	char podstroka[6];
  	int ch=0;
  	cout<<" vvedite stroky:  ";
  	cin.getline(stroka, 30);
  	cout<<"\n vvedite iskomyjy podstroky:  ";
  	cin.getline(podstroka, 6);
  	for ( int i=0; i<50; i++)
  	{
  		if (podstroka[0]==stroka[i])&&
  	   	   (podstroka[1]==stroka[i])&&
  	   	   (podstroka[2]==stroka[i])&&
  	   	   (podstroka[3]==stroka[i])&&
  		   (podstroka[4]==stroka[i])&&
  	   	   (podstroka[5]==stroka[i]) ch++;  		
}
  		cout<<ch;  		
}
не получается...
Мог бы дать ..."самый быстрый поиск" но не обьяснишь преподу ,раз проблемы с простейшим! Есть несколько миров в программировании!
Код:
...
 int flag;
 for(i=0,ch=0;*(stroka+i)!=0;i++)
 {
  for(int j=0,flag=0;*(podstroka+j)!=0 && flag==0 && *(stroka+i+j)!=0;j++)
      if(*(stroka+i+j)!=*(podstroka+j))
          flag=1;
      if(flag==0)
         ch++;
 }

Последний раз редактировалось Retimiled; 27.12.2009 в 19:07..
 
Ответить с цитированием

  #2118  
Старый 27.12.2009, 17:26
Sinex
Участник форума
Регистрация: 17.08.2006
Сообщений: 129
Провел на форуме:
775997

Репутация: 89
Отправить сообщение для Sinex с помощью ICQ
По умолчанию

Помогите пожалуйста с ассемблером.
Шесть задач надо срочно сделать.
+ гарантируется
1)Издающий писк, если слово оканчивается буквой "В"
2)Стирающий экран при нажатии клавиши "END"
3)Издающий писк только при вводе латинских букв.
4)Издающий писк только при вводе букв кириллицы.
5)Стирающий предыдущий символ при нажатии клавиш "wn" (эти две буквы при этом на экран выводиться не должны)
6)Заменяющий все буквы Ы кириллицы на сочетание "йи"
 
Ответить с цитированием

  #2119  
Старый 27.12.2009, 17:27
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

Цитата:
Сообщение от Retimiled  
Код:
...
 int flag;
 for(i=0,ch=0;*(stroka+i)!=0;i++)
 {
  for(int j=0,flag=0;*(podstroka+j)!=0 && flag==0;j++)
      if(*(stroka+i+j)!=*(podstroka+j))
          flag=1;
      if(flag==0)
         ch++;
 }
В *(stroka+i+j) будет выход за пределы строки.
 
Ответить с цитированием

  #2120  
Старый 27.12.2009, 18:03
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

Код:
bool strcheck(const char* src, const char* sub){
	while ( (*src == *sub) && *sub ){
		src++;
		sub++;
	}
	return *sub == 0;
}


int find_substr(const char* text, const char* sub){
	const char* cur_text = text;
	const char* end_text = text + strlen(text) - strlen(sub);
	int position = -1;

	while(cur_text++ != end_text){
		if(strcheck(cur_text, sub)){
			position = cur_text - text;
			break;
		}
	}

	return position;
}

int main(){
	char text[] = {"123 111 345 321 654"};
	char sub[] = {"655"};
	int position = find_substr(text, sub);

	if(position != -1){
		cout << "position: " << position << ", substring = " << sub << endl;
	}
	else{
		cout << "substring not found" << endl;
	}
	return 0;
}
ps: strcheck можете заменить на вызов strcmp. главное соблюдать порядок параметров - первым идет текст, вторым искомая подстрока.

Последний раз редактировалось Ra$cal; 27.12.2009 в 18:08..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сюда выкладываем все проги для фрикринга мобильников, которых знаем! nigger Сотовый фрикинг 5 11.04.2009 11:15
Американским студентам запретили пользоваться Skype KPOT_f!nd Мировые новости 1 28.09.2006 03:47
Любителям квестов сюда!! FoX's Болталка 10 25.01.2005 20:42



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ