Skip to main content
edited tags
Link
Karl Knechtel
  • 61.4k
  • 14
  • 132
  • 193
Source Link

How do I count the number of sentences in C using ".", "?", "!"?

I'm fairly new to coding. I'm having trouble with my "CountSentences" function. I compare the string to "." , "?" , and ! to count a sentence. It only adds one to the sentence counter no matter how many of the punctuation marks I have in the string. Am I using strcmp wrong to get my desired result and is there another way I can approach this?


#include<cs50.h>

#include<ctype.h>

#include<string.h>

#include<math.h>

//function for letter count
int count_letters(string s)
{
    int numberofLetters = 0; // counter

    //loop as long as string length
    for(int i = 0, n = strlen(s); i < n;  i++)
    {
        //if character is alphanumeric
        if(isalnum(s[i]) != 0)
        {
            numberofLetters++; //increase counter
        };
    };
    return numberofLetters; //return new counter number
};

//function for word count
int count_Words(string w)
{
    int numberofWords = 0;//counter for words declared
    int i = 0; // counter for character in string

    if(w == NULL) // if nothing
    {
        return numberofWords; // return Wordcount of 0
    };


    bool spaces = true; //truth value for space

    //if character is not null terminating character
    while(w[i] != '\0')
    {


        if(isblank(w[i]) != 0) //if character is blank
        {
            spaces = true; //its a space
        }
        else if(spaces) //if no more space and a letter is present add to words
        {
            numberofWords++; //add to number of words counter
            spaces = false;
        };
        i++;// increase chracter count in string w

    };

    return numberofWords; //return total word counter
};

//function to count sentences
int count_Sentences(string l)
{
    //variable counter for marks
    int countMarks = 0;

    //loop iteration using the number of characters in string
    for(int i = 0, n = strlen(l); i < n; i++)
    {
        //check if character is ?, . , or !
        if(strcmp(&l[i], "!") == 0  || strcmp(&l[i], ".") == 0  ||  strcmp(l, "?") == 0)
        {
            countMarks++;// sentence counted
        };

    };
    // return the total number of marks
    return countMarks;
};


int main (void)
{
    string text = get_string ("Text: ");

//to check the functions bug checker
    printf("Number of letters: %i\n", count_letters(text));
    printf("Number of words: %i\n", count_Words(text));
    printf("Number of sentences: %i\n", count_Sentences(text));

    //Coleman Liau Index
    int grade = round(0.0588 * (100 * (count_letters(text)) / (count_Words(text))) - 0.296 * (100 *(count_Sentences(text)) / (count_Words(text))) - 15.8 );



    if(grade <= 1)
    {
        printf("Before Grade 1\n");
    }
    else if(grade < 16)
    {
        printf("Grade %i\n", grade);
    }
    else
    {
        printf("Grade 16+\n");
    };
};