Difference between revisions of "Interview Preparation Strings"
From Embedded Systems Learning Academy
Proj user14 (talk | contribs) |
Proj user14 (talk | contribs) (→Reverse words in a string) |
||
Line 46: | Line 46: | ||
void reverse_words_in_string(char *s) | void reverse_words_in_string(char *s) | ||
{ | { | ||
+ | /* | ||
+ | * 1st step | ||
+ | * In below while loop , string becomes "erehw ereht si a lliw ereht si a yaw" | ||
+ | */ | ||
+ | /* To obtain the start of word to be reversed in a string and its length */ | ||
int i=0; | int i=0; | ||
− | int j=0; | + | /*To traverse through string */ |
− | + | unsigned int j=0; | |
− | + | ||
− | + | while(j <= strlen(s)) | |
− | |||
− | while( | ||
{ | { | ||
+ | /* Check for word in string. '\0' condition is checked for last word */ | ||
if( *(s+j) == ' ' || *(s+j) == '\0') | if( *(s+j) == ' ' || *(s+j) == '\0') | ||
{ | { | ||
+ | /* (s+i) points at the start of word and (j-i) denotes the length */ | ||
reverse( s+i, j-i ); | reverse( s+i, j-i ); | ||
+ | /* "i" will have the index at which next word starts */ | ||
i = j+1; | i = j+1; | ||
− | |||
− | |||
− | |||
− | |||
} | } | ||
j++; | j++; | ||
} | } | ||
− | /* | + | /* |
− | + | * 2nd Step | |
− | + | * string "erehw ereht si a lliw ereht si a yaw" is reversed to get "way a is there will a is there where" | |
− | reverse(s,strlen(s)); | + | */ |
+ | reverse(s,strlen(s)); | ||
+ | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 08:48, 30 November 2016
Contents
Reverse a string
void reverse_str(char *s)
{
const int len = strlen(s);
const int mid = len / 2;
for (int i = 0, j=len-1; i < mid; i++, j--) {
char c = s[i];
s[i] = s[j];
s[j] = c;
}
}
Reverse words in a string
If string to be reversed is "where there is a will there is a way"
Output needed : "way a is there will a is there where"
To reverse the words in a string , we will follow below steps:
1) First, we will reverse each word in the string as "erehw ereht si a lliw ereht si a yaw"
2) Second, we will reverse this string by letter to get the desired output.
We are going to use previous reverse_str function with one more parameter "length" as below:
void reverse_str(char *s ,int len)
{
int i,j;
char temp;
j= len - 1;
int mid = len/2;
for(i=0;i<mid;i++,j--)
{
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
void reverse_words_in_string(char *s)
{
/*
* 1st step
* In below while loop , string becomes "erehw ereht si a lliw ereht si a yaw"
*/
/* To obtain the start of word to be reversed in a string and its length */
int i=0;
/*To traverse through string */
unsigned int j=0;
while(j <= strlen(s))
{
/* Check for word in string. '\0' condition is checked for last word */
if( *(s+j) == ' ' || *(s+j) == '\0')
{
/* (s+i) points at the start of word and (j-i) denotes the length */
reverse( s+i, j-i );
/* "i" will have the index at which next word starts */
i = j+1;
}
j++;
}
/*
* 2nd Step
* string "erehw ereht si a lliw ereht si a yaw" is reversed to get "way a is there will a is there where"
*/
reverse(s,strlen(s));
}
Find the last word in a string
If given string is "Dreams don't work unless you do "
Output needed : "do"
To get the desired output we will use one pointer which points at the end of string and we will transverse it till we get our first blank space between last 2 words in string.
char* last_word_in_string(char *s)
{
int i=0;
char* last;
const int len= strlen(s) -1;
char *j = s + len;
/*
* If last letter of string is blank space then it will be avoided.
*/
if (*(s+len) == ' ')
{
j = j-1;
}
while(*j)
{
if ( *j== ' ')
{
j++;
break;
}
j--;
i++;
}
return j;
}
Check if strings are Anagram
TODO