Difference between revisions of "Interview Preparation Strings"

From Embedded Systems Learning Academy
Jump to: navigation, search
(Reverse words in a string)
(Reverse words in a string)
Line 15: Line 15:
 
<BR/>
 
<BR/>
 
== Reverse words in a string ==
 
== Reverse words in a string ==
<BR/>
 
 
If string to be reversed is "where there is a will there is a way"
 
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"
 
Output needed : "way a is there will a is there where"
 
 
<BR/>
 
<BR/>
 
To reverse the words in a string , we will follow below steps:
 
To reverse the words in a string , we will follow below steps:
Line 25: Line 23:
 
<BR/>
 
<BR/>
 
2) Second, we will reverse this string by letter to get the desired output.
 
2) Second, we will reverse this string by letter to get the desired output.
<
+
<BR/>
BR/>
 
 
We are going to use previous reverse_str function with one more parameter length as below:
 
We are going to use previous reverse_str function with one more parameter length as below:
  
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 +
 
void reverse_str(char *s ,int len)
 
void reverse_str(char *s ,int len)
 
{
 
{
        int i,j;
+
    int i,j;
 
char temp;
 
char temp;
 
j= len - 1;
 
j= len - 1;
int mid = len1/2;
+
int mid = len/2;
 
for(i=0;i<mid;i++,j--)
 
for(i=0;i<mid;i++,j--)
 
{
 
{
Line 53: Line 51:
 
* In below while loop , string becomes "erehw ereht si a lliw ereht si a yaw"
 
* In below while loop , string becomes "erehw ereht si a lliw ereht si a yaw"
 
*/
 
*/
while(*str)
+
while(*s)
 
{
 
{
if( *(str+j) == ' ' || *(str+j) == '\0')
+
if( *(s+j) == ' ' || *(s+j) == '\0')
 
{
 
{
reverse( str+i, j-i );
+
reverse( s+i, j-i );
 
i = j+1;
 
i = j+1;
 
}
 
}
if( *(str+j) == '\0')
+
if( *(s+j) == '\0')
 
{
 
{
 
break;
 
break;
Line 69: Line 67:
 
* 2nd Step
 
* 2nd Step
 
*/
 
*/
reverse(str,strlen(str));  
+
reverse(s,strlen(s));  
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>

Revision as of 21:32, 24 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)
{
	int i=0;
	int j=0;
	/*
	 * 1st step
	 * In below while loop , string becomes "erehw ereht si a lliw ereht si a yaw"
	 */
	while(*s)
	{
		if( *(s+j) == ' ' || *(s+j) == '\0')
		{
			reverse( s+i, j-i );
			i = j+1;
		}
		if( *(s+j) == '\0')
		{
			break;
		}
		j++;
	}
	/*
	 * 2nd Step
	 */
	reverse(s,strlen(s)); 
}


Find the last word in a string

TODO


TODO : More string questions