Quick links
Write a C program to find occurrence of a word in file. How to find first or last occurrence of a word in file in C programming. Logic to find occurrence of a word in file in C program. How to search first and last occurrence of a word in file in C programming.
Required knowledge
Basic Input Output, String, Functions, Pointers, File Handling
Logic to find occurrence of a word in file
Step by step descriptive logic to find first occurrence of a word in file.
- Input source file in which you need to search, store its reference to
fptr
. - Input word to search in file, store it in some variable say
word
. - Initialize two variables
line = -1
andcol = -1
. They will store index of line and column of searched word in file. - Read a line from file, store it in
str
. - Increment
line
count by one. - Find first index of
word
instr
and store it incol
. Ifword
is found instr
then printline
andcol
which is required index and jump to step 8.Now, here’s the tricky part. I have used
strstr()
C library function. It returns pointer to first occurrence of a given word in a string. To find first occurrence ofword
instr
usepos = strstr(str, word);
(wherepos
is pointer to character).pos
will point to first occurrence ofword
instr
if exists, otherwise points toNULL
. Checkif(pos != NULL)
then find column index usingcol = pos - str
. - Repeat step 4-6 till end of file.
- Close
fptr
file to release all resources.
Program to find occurrence of a word in file
/**
* C program to find first occurrence of a word in file.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE 1000
/* Function declarations */
int indexOf(FILE *fptr, const char *word, int *line, int *col);
int main()
{
FILE *fptr;
char path[100];
char word[50];
int line, col;
/* Input file path */
printf("Enter file path: ");
scanf("%s", path);
/* Input word to search in file */
printf("Enter word to search in file: ");
scanf("%s", word);
/* Try to open file */
fptr = fopen(path, "r");
/* Exit if file not opened successfully */
if (fptr == NULL)
{
printf("Unable to open file.\n");
printf("Please check you have read/write previleges.\n");
exit(EXIT_FAILURE);
}
// Find index of word in fptr
indexOf(fptr, word, &line, &col);
if (line != -1)
printf("'%s' found at line: %d, col: %d\n", word, line + 1, col + 1);
else
printf("'%s' does not exists.", word);
// Close file
fclose(fptr);
return 0;
}
/**
* Finds, first index of a word in given file. First index is represented
* using line and column.
*/
int indexOf(FILE *fptr, const char *word, int *line, int *col)
{
char str[BUFFER_SIZE];
char *pos;
*line = -1;
*col = -1;
while ((fgets(str, BUFFER_SIZE, fptr)) != NULL)
{
*line += 1;
// Find first occurrence of word in str
pos = strstr(str, word);
if (pos != NULL)
{
// First index of word in str is
// Memory address of pos - memory
// address of str.
*col = (pos - str);
break;
}
}
// If word is not found then set line to -1
if (*col == -1)
*line = -1;
return *col;
}
Wondering how (pos - str)
gives index of occurrence of word
. Then, please give a moment to read pointer arithmetic in C programming.
Suppose <strong>data/file3.txt</strong>
contains.
I love programming.
I am learning C programming at Codeforwin.
Programming with files is fun.
Learning C programming at Codeforwin is simple and easy.
Output
Enter file path: data/file3.txt Enter word to search in file: Codeforwin 'Codeforwin' found at line: 2, col: 32
Logic to find last occurrence of a word is almost similar. I am leaving logic to you, so that you can practice a bit. However, I have written program to find last index of a word in file.
Program to find last occurrence of a word in file
/**
* C program to find last occurrence of a word in file.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE 1000
/* Function declarations */
int lastIndexOf(FILE *fptr, const char *word, int *line, int *col);
int main()
{
FILE *fptr;
char path[100];
char word[50];
int line, col;
/* Input file path */
printf("Enter file path: ");
scanf("%s", path);
/* Input word to search in file */
printf("Enter word to search in file: ");
scanf("%s", word);
/* Try to open file */
fptr = fopen(path, "r");
/* Exit if file not opened successfully */
if (fptr == NULL)
{
printf("Unable to open file.\n");
printf("Please check you have read/write previleges.\n");
exit(EXIT_FAILURE);
}
// Find last index of word in str
lastIndexOf(fptr, word, &line, &col);
if (line != -1)
printf("Last index of '%s' line: %d, col: %d\n", word, line + 1, col + 1);
else
printf("'%s' does not exists.", word);
// Close file
fclose(fptr);
return 0;
}
/**
* Finds, last index of a word in given file. Last index is represented
* using line and column.
*/
int lastIndexOf(FILE *fptr, const char *word, int *line, int *col)
{
char str[BUFFER_SIZE];
char *pos;
int lfound, cfound;
*line = -1;
*col = -1;
lfound = -1;
cfound = -1;
while ((fgets(str, BUFFER_SIZE, fptr)) != NULL)
{
*line += 1;
*col = -1;
// Find next occurrence of word in str
while ((pos = strstr(str + *col + 1, word)) != NULL)
{
// Index of word in str is
// Memory address of pos - memory
// address of str.
*col = (pos - str);
// Mark current line as word found at
// this line and col.
lfound = *line;
cfound = *col;
}
}
// If word is not found then set line to -1
if (cfound == -1)
{
*line = -1;
*col = -1;
}
else
{
// Make sure line contains last found index
*line = lfound;
*col = cfound;
}
return *col;
}
Output
Enter file path: data/file3.txt Enter word to search in file: Codeforwin Last index of 'Codeforwin' line: 4, col: 27
Happy coding 😉