Blame


1 5dc21454 2023-07-14 jrmu /*
2 5dc21454 2023-07-14 jrmu * Exercise 4-1. Write the function strrindex(s,t), which returns the position
3 5dc21454 2023-07-14 jrmu * of the rightmost occurrence of t in s, or -1 if there is none.
4 5dc21454 2023-07-14 jrmu */
5 5dc21454 2023-07-14 jrmu
6 5dc21454 2023-07-14 jrmu #include <stdio.h>
7 5dc21454 2023-07-14 jrmu #include <string.h>
8 5dc21454 2023-07-14 jrmu #define MAXLINE 1000 /* maximum input line length */
9 5dc21454 2023-07-14 jrmu
10 5dc21454 2023-07-14 jrmu int getlin(char line[], int max);
11 5dc21454 2023-07-14 jrmu int strindex(char source[], char searchfor[]);
12 5dc21454 2023-07-14 jrmu int strrindex(char s[], char t[]);
13 5dc21454 2023-07-14 jrmu
14 5dc21454 2023-07-14 jrmu char pattern[] = "or"; /* pattern to search for */
15 5dc21454 2023-07-14 jrmu
16 5dc21454 2023-07-14 jrmu /* find all lines matching pattern */
17 5dc21454 2023-07-14 jrmu
18 5dc21454 2023-07-14 jrmu int main() {
19 5dc21454 2023-07-14 jrmu char line[MAXLINE];
20 5dc21454 2023-07-14 jrmu int found = 0;
21 5dc21454 2023-07-14 jrmu int index = 0;
22 5dc21454 2023-07-14 jrmu
23 5dc21454 2023-07-14 jrmu printf("pattern: %s\n", pattern);
24 5dc21454 2023-07-14 jrmu while (getlin(line, MAXLINE) > 0)
25 5dc21454 2023-07-14 jrmu if ((index = strrindex(line, pattern)) >= 0) {
26 5dc21454 2023-07-14 jrmu printf("index: %d, %s", index, line);
27 5dc21454 2023-07-14 jrmu found++;
28 5dc21454 2023-07-14 jrmu }
29 5dc21454 2023-07-14 jrmu return found;
30 5dc21454 2023-07-14 jrmu }
31 5dc21454 2023-07-14 jrmu
32 5dc21454 2023-07-14 jrmu /* getlin: get line into s, return length */
33 5dc21454 2023-07-14 jrmu int getlin(char s[], int lim) {
34 5dc21454 2023-07-14 jrmu int c, i;
35 5dc21454 2023-07-14 jrmu i = 0;
36 5dc21454 2023-07-14 jrmu while (--lim > 0 && (c=getchar()) != EOF && c != '\n')
37 5dc21454 2023-07-14 jrmu s[i++] = c;
38 5dc21454 2023-07-14 jrmu if (c == '\n')
39 5dc21454 2023-07-14 jrmu s[i++] = c;
40 5dc21454 2023-07-14 jrmu s[i] = '\0';
41 5dc21454 2023-07-14 jrmu return i;
42 5dc21454 2023-07-14 jrmu }
43 5dc21454 2023-07-14 jrmu
44 5dc21454 2023-07-14 jrmu /* strindex: return index of t in s, -1 if none */
45 5dc21454 2023-07-14 jrmu int strindex(char s[], char t[]) {
46 5dc21454 2023-07-14 jrmu int i, j, k;
47 5dc21454 2023-07-14 jrmu
48 5dc21454 2023-07-14 jrmu for (i = 0; s[i] != '\0'; i++) {
49 5dc21454 2023-07-14 jrmu for (j=i, k=0; t[k] != '\0' && s[j] == t[k]; j++, k++)
50 5dc21454 2023-07-14 jrmu ;
51 5dc21454 2023-07-14 jrmu if (k > 0 && t[k] == '\0')
52 5dc21454 2023-07-14 jrmu return i;
53 5dc21454 2023-07-14 jrmu }
54 5dc21454 2023-07-14 jrmu return -1;
55 5dc21454 2023-07-14 jrmu }
56 5dc21454 2023-07-14 jrmu
57 5dc21454 2023-07-14 jrmu /* strrindex: return index of rightmost t in s, -1 if none */
58 5dc21454 2023-07-14 jrmu int strrindex(char s[], char t[]) {
59 5dc21454 2023-07-14 jrmu int i, j, k;
60 5dc21454 2023-07-14 jrmu for (i = strlen(s)-1; s[i] != '\0'; i--) {
61 5dc21454 2023-07-14 jrmu for (j=i, k=0; t[k] != '\0' && s[j] == t[k]; j++, k++)
62 5dc21454 2023-07-14 jrmu ;
63 5dc21454 2023-07-14 jrmu if (k > 0 && t[k] == '\0')
64 5dc21454 2023-07-14 jrmu return i;
65 5dc21454 2023-07-14 jrmu }
66 5dc21454 2023-07-14 jrmu return -1;
67 5dc21454 2023-07-14 jrmu }