Sunday 12 February 2017

longest word in string


Find longest word in string in c

function to get base address of longest word in string


const char* largest_word(const char *str){
        unsigned int word_len=0, cur_word_len=0;
        const char *word = str, *cur_word=str;
        int i = 0;
        while(str[i] != '\0'){
                if(isspace(str[i])){
                        cur_word_len = (str+i) - cur_word;
                        if(word_len < cur_word_len){
                                word_len = cur_word_len;
                                word = cur_word;
                        }
                        while(isspace(str[i])){
                                i++;
                        }
                        cur_word = str+i;
                }else{
                        i++;
                }
        }
        cur_word_len = (str+i) - cur_word;
        if(word_len < cur_word_len){
                word_len = cur_word_len;
                word = cur_word;
        }
        return word;
}

find longest word using above function


int find_largest_word(const char *str, char result[]){
        const char *word = largest_word(str);
        int i=0;
        while(word[i] != '\0' && (!isspace(word[i]))){
                result[i] = word[i];
                i++;
        }
        return i;
}

full code


#include <stdio.h>
#include <ctype.h>

int my_isspace(char ch){
        return (ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t' || ch == '\v' || ch == '\f');
}

const char* largest_word(const char *str){
        unsigned int word_len=0, cur_word_len=0;
        const char *word = str, *cur_word=str;
        int i = 0;
        while(str[i] != '\0'){
                if(isspace(str[i])){
                        cur_word_len = (str+i) - cur_word;
                        if(word_len < cur_word_len){
                                word_len = cur_word_len;
                                word = cur_word;
                        }
                        while(isspace(str[i])){
                                i++;
                        }
                        cur_word = str+i;
                }else{
                        i++;
                }
        }
        cur_word_len = (str+i) - cur_word;
        if(word_len < cur_word_len){
                word_len = cur_word_len;
                word = cur_word;
        }
        return word;
}
int find_largest_word(const char *str, char result[]){
        const char *word = largest_word(str);
        int i=0;
        while(word[i] != '\0' && (!isspace(word[i]))){
                result[i] = word[i];
                i++;
        }
        return i;
}

int main(int argc, char *argv[]){
        char word[256]={0x00};
        if(argc != 2){
                fprintf(stderr, "USAGE: %s <string>\n", argv[0]);
                return -1;
        }
        find_largest_word(argv[1], word);
        printf("%s\n", word);
        return 0;
}

Compile and Output


rajesh@ideapad:~/Rajesh/Blog/string$ gcc word_length.c 
rajesh@ideapad:~/Rajesh/Blog/string$ ./a.out 
USAGE: ./a.out 
rajesh@ideapad:~/Rajesh/Blog/string$ ./a.out "hello world"
hello
rajesh@ideapad:~/Rajesh/Blog/string$ ./a.out "welcome to bangalore"
bangalore
rajesh@ideapad:~/Rajesh/Blog/string$ ./a.out "India welcomes you"
welcomes

No comments:

Post a Comment