Difference between revisions of "Interview Preparation Strings"

From Embedded Systems Learning Academy
Jump to: navigation, search
(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;
* 1st step
+
 
* In below while loop , string becomes "erehw ereht si a lliw ereht si a yaw"
+
while(j <= strlen(s))
*/
 
while(*s)
 
 
{
 
{
 +
/* 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;
}
 
if( *(s+j) == '\0')
 
{
 
break;
 
 
}
 
}
 
j++;
 
j++;
 
}
 
}
/*
+
/*
* 2nd Step
+
* 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

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

TODO : More string questions