помогите с лабораторной. Нужно осуществить поиск подстроки в строке без использования функций. я пробовал так: Code: #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; } не получается...
как ты представляешь логику твоей программы? ты на каждой итерации сравниваешь поочердено все символы подстроки с одним элементом. что неверно. ты должен сравнивать i-ый элемент строки с первым в подстроке. i+1-ый со вторым и тд. плюс избегай странных чисел, используй константы
PLS помогите решить задачу реально сам не могу справиться. Мне её в понедельник надо сдать(28.12.09). Заранее очень благодарен В киоске продается растворимый кофе, предлагается ассортимент из трех известных кофейных торговых марок (названия на ваш выбор), а также варианты приготовления – полный стакан / половина стакана, от 0 до 2 ложек сахара. Сделайте объявление структуры данных, моделирующей заказ кофе. При этом для кода торговой марки обязательно применить конструкцию enum, а информацию о количестве воды и ложек сахара следует запаковать при помощи битовых полей в один байт. Нужно составить тестовую программу, использующую такую структуру.
2 STIFFmaster : попробуй так : Code: 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 < strlen(stroka); i++) for(int j = 0; j < strlen(podstroka); j++){ if(stroka[i] == podstroka[j]) ch++; } cout<<ch; } Так должно получиться .... я только точно не помню правильно ли я указал функции определения длинны строки - то ли strlen() то ли len()
Интересно, а что данная функция считает ? Мозгом чувствую что что-то интересное, но что именно - понять не могу
дык - так просто такую проверку добавь: Code: if(ch == strlen(podstroka)){ kol_podstrok ++; ch = 0; } То есть если количество совпадений без прерывно равно длине подстроки значить ето она , и мы увеличиваем счетчик подстрок, и обнуляем счетчик совпадений дабы заново искать подстроку....
Какой язык? Вот тебе на Сях Code: #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); } }
Помогите пожалуйста, скоро зачет, а массивы для меня - темный лес. К четвергу все задачи надо прорешать, помогите хотя бы несколько сделать. Условия по ссылке http://narod.ru/disk/16374301000/zachet.doc.html
Мог бы дать ..."самый быстрый поиск" но не обьяснишь преподу ,раз проблемы с простейшим! Есть несколько миров в программировании! Code: ... 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++; }
Помогите пожалуйста с ассемблером. Шесть задач надо срочно сделать. + гарантируется 1)Издающий писк, если слово оканчивается буквой "В" 2)Стирающий экран при нажатии клавиши "END" 3)Издающий писк только при вводе латинских букв. 4)Издающий писк только при вводе букв кириллицы. 5)Стирающий предыдущий символ при нажатии клавиш "wn" (эти две буквы при этом на экран выводиться не должны) 6)Заменяющий все буквы Ы кириллицы на сочетание "йи"
Code: 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. главное соблюдать порядок параметров - первым идет текст, вторым искомая подстрока.
2 algol Code: ... 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++; } 2-nd verson придумываю для вас прямо тут не проверяя .... так что проверяйте! Code: #include <stdio.h> void st(char *str1,char *str2,int l, int *sum) { if(*str1==0) { if(*str2==0) *sum++; } else if(*str2==0) *sum++; else if(*str1==*str2) st(str1+1,str2+1,l+1,sum); else st(str1-l+1,str2-l,0,sum); } int main() { int sum=0; char str[]="srvferv ergergt4etr retgbrth4 wfwrefg4ert5 wqede"; char stt[]="er"; st(str,stt,0,&sum); printf("Совпадений:%d",sum); }
1) Из заданного текста выбрать и напечатать те символы, которые встречаются в нем ровно один раз (в порядке, как они встречаются в тексте) 2) Дан файл f, компоненты которого являются целыми числами. Найти количество квадратов простых чисел среди компонент. 3) Даны символьные файлы f и g. Определить совпадают ли компоненты файла f с компонентами файла g. Если нет то получить номер первой компоненты, в которой исходные файлы отличаются между собой. В случае когда один из файлов имеет n компонент (n>=0) и повторяет начало другого (более длинного файла), ответом должно быть число n+1 Задачи по C++.
1. Бежим по символьно и каждый символ заносишь в хеш таблицу, потом распечатываешь те у который значение равно 1, (символ в этом случае ключ, а в хеш таблице они будут храниться в томже поряднке в каком в тексте встречаются) 2. эм, ну, если я правильно понял, считываешь число из файла, возводишь в квадрат, смотришь простое ли это число, если да увеличиваешь счетчик на +1 3. ... PS. я видно не в тему, тут не объяснять, а делать за вас надо ?
интересно, спасибо, почитаю про хеш таблицы. задачи простые, но с++ не знаю совершенно. на паскале бы решил без проблем