Другие языки программирования и технологии
Строки. =(ужс, торможу. Помогите, пожалуйста! На Си.
Описать функцию PosLast (S0, S) целого типа, возвращающую номер позиции, начиная с которой в строке S содержится последнее вхождение подстроки S0. Считать, что перекрывающихся вхождений подстрок S0 строка S не содержит. Если в строке S отсутствуют подстроки S0, то функция возвращает 0. Вывести значение этой функции для пяти данных пар строк S0 и S.
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
int PosLast(char *, char *);
void message(short);
void main() {
char line[256], subline[256];
int position;
message(1); gets_s(line);
message(2); gets_s(subline);
position = PosLast(subline, line);
if (position) {
message(3); printf("%d", position);
} else message(4);
_getch();
}
int PosLast(char * sub, char * str) {
int x, y, n = 0, m, expectation = 1, next;
x = strlen(str);
y = strlen(sub);
next = m = y - 1;
if (x >= y) {
for (n = x - 1; n >= 0; n--) {
if (n == 0 && str[0] == sub[0]) { n++; break; }
if (n < next) { n = 0; break; }
if (expectation && str[n] != sub[m]) continue;
else if (expectation) expectation = 0;
if (next < 0) { n += 2; break; }
if (str[n] == sub[next--]) continue;
else { next = m; expectation = 1; }
}
} return n;
}
void message(short command) {
setlocale(LC_CTYPE, "Russian_Russia.1251");
switch (command) {
case 1: printf("\n Введите строку: "); break;
case 2: printf("\n Введите подстроку: "); break;
case 3: printf("\n Позиция последнего вхождения равна: "); break;
case 4: printf("\n Подстрока не входит в строку! "); break;
} setlocale(LC_CTYPE, "English_United States.866");
}
#include <locale.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
int PosLast(char *, char *);
void message(short);
void main() {
char line[256], subline[256];
int position;
message(1); gets_s(line);
message(2); gets_s(subline);
position = PosLast(subline, line);
if (position) {
message(3); printf("%d", position);
} else message(4);
_getch();
}
int PosLast(char * sub, char * str) {
int x, y, n = 0, m, expectation = 1, next;
x = strlen(str);
y = strlen(sub);
next = m = y - 1;
if (x >= y) {
for (n = x - 1; n >= 0; n--) {
if (n == 0 && str[0] == sub[0]) { n++; break; }
if (n < next) { n = 0; break; }
if (expectation && str[n] != sub[m]) continue;
else if (expectation) expectation = 0;
if (next < 0) { n += 2; break; }
if (str[n] == sub[next--]) continue;
else { next = m; expectation = 1; }
}
} return n;
}
void message(short command) {
setlocale(LC_CTYPE, "Russian_Russia.1251");
switch (command) {
case 1: printf("\n Введите строку: "); break;
case 2: printf("\n Введите подстроку: "); break;
case 3: printf("\n Позиция последнего вхождения равна: "); break;
case 4: printf("\n Подстрока не входит в строку! "); break;
} setlocale(LC_CTYPE, "English_United States.866");
}
написал. отдам за 200р.
пиши на mailme@libertypaul.ru
или в ICQ 3255675
пиши на mailme@libertypaul.ru
или в ICQ 3255675
Похожие вопросы
- Помогите пожалуйста. Язык Си работа с файлами
- Помогите пожалуйста создать программу "Таймер" на СИ. Заранее всем благодарен!)
- Помогите пожалуйста составить программу на СИ++. Заранее всем БЛАГОДАРЕН!
- Задача Pascal , строки , помогите пожалуйста !!!
- помогите с программой!!! (Си) Двумерный массив+строки
- Кто знает язык Си? ПОМОГИТЕ ПОЖАЛУЙСТА!!!
- помогите пожалуйста решить задачу в С++,завтра экзамен. дана матрица а [4][5],надо найти строку с максимальным средним ари
- «Помогите пожалуйста! Очень надо!! ! Нужно написать на языке Си (именно на СИ) . Заранее СПАСИБО!!!»
- Помогите пожалуйста решить задачу по программированию или напишите, как удалить подряд стоящие точки. (Си, Си++ Билдер)
- Язык Си. Помогите пожалуйста написать простую программу.