Strings (Part - 3), C Programming Interview Questions Quant Notes | EduRev

Placement Papers - Technical & HR Questions

Created by: Prateek Kaushik

Quant : Strings (Part - 3), C Programming Interview Questions Quant Notes | EduRev

The document Strings (Part - 3), C Programming Interview Questions Quant Notes | EduRev is a part of the Quant Course Placement Papers - Technical & HR Questions.
All you need of Quant at this link: Quant

7. How can I convert a number to a string?

The standard C library provides several functions for converting numbers of all formats (integers, longs, floats, and so on) to strings and vice versa. One of these functions, itoa(), is used here to illustrate how an integer is converted to a string:

 

#include <stdio.h>
#include <stdlib.h>
void main(void);
void main(void)
{
     int num = 100;
     char str[25];
     itoa(num, str, 10);
     printf("The number 'num' is %d and the string 'str' is %s.\n",
                 num, str);
}

 

Notice that the itoa() function takes three arguments: the first argument is the number you want to convert to the string, the second is the destination string to put the converted number into, and the third is the base, or radix, to be used when converting the number. The preceding example uses the common base 10 to convert the number to the string.

The following functions can be used to convert integers to strings:

 

Function Name   Purpose
itoa() - Converts an integer value to a string.
ltoa() - Converts a long integer value to a string.
ultoa() - Converts an unsigned long integer value to a string.

Note that the itoa()ltoa(), and ultoa() functions are not ANSI compatible. An alternative way to convert an integer to a string (that is ANSI compatible) is to use the sprintf() function, as in the following example:

 

#include <stdio.h>
#include <stdlib.h>
void main(void);
void main(void)
{
     int num = 100;
     char str[25];
     sprintf(str, "%d", num);
     printf("The number 'num' is %d and the string 'str' is %s.\n",
                 num, str);
}

 

When floating-point numbers are being converted, a different set of functions must be used. Here is an example of a program that uses the standard C library function fcvt() to convert a floating-point value to a string:

 

#include <stdio.h>
#include <stdlib.h>
void main(void);
void main(void)
{
     double num = 12345.678;
     char* str;
     int dec_pl, sign, ndigits = 3;    /* Keep 3 digits of precision. */
     str = fcvt(num, ndigits, &dec_pl, &sign);  /* Convert the float
                                                           to a string. */
     printf("Original number:  %f\n", num);     /* Print the original
                                                   floating-point
                                                   value. */
     printf("Converted string: %s\n", str);     /* Print the converted
                                                   string's value */
     printf("Decimal place:    %d\n", dec_pl);  /* Print the location of
                                                   the decimal point. */
     printf("Sign:             %d\n", sign);    /* Print the sign.
                                                   0 = positive,
                                                   1 = negative. */
}

 

Notice that the fcvt() function is quite different from the itoa() function used previously. The fcvt()function takes four arguments. The first argument is the floating-point value you want to convert. The second argument is the number of digits to be stored to the right of the decimal point. The third argument is a pointer to an integer that is used to return the position of the decimal point in the converted string. The fourth argument is a pointer to an integer that is used to return the sign of the converted number (0 is positive, 1 is negative).

Note that the converted string does not contain the actual decimal point. Instead, the fcvt() returns the position of the decimal point as it would have been if it were in the string. In the preceding example, the dec_pl integer variable contains the number 5 because the decimal point is located after the fifth digit in the resulting string. If you wanted the resulting string to include the decimal point, you could use the gcvt() function (described in the following table).

The following functions can be used to convert floating-point values to strings:

 

Function   Purpose
ecvt() - Converts a double-precision floating-point value to a string without an embedded decimal point.
fcvt() - Same as ecvt(), but forces the precision to a specified number of digits.
gcvt() - Converts a double-precision floating-point value to a string with an embedded decimal point.


8. How can I convert a string to a number?

The standard C library provides several functions for converting strings to numbers of all formats (integers, longs, floats, and so on) and vice versa. One of these functions, atoi(), is used here to illustrate how a string is converted to an integer:

 

#include <stdio.h>
#include <stdlib.h>
void main(void);
{
     int num;
     char* str = "100";
     num = atoi(str);
     printf("The string 'str' is %s and the number 'num' is %d.\n",
                 str, num);
}

 

To use the atoi() function, you simply pass it the string containing the number you want to convert. The return value from the atoi() function is the converted integer value.

The following functions can be used to convert strings to numbers:

 

Function Name   Purpose
atof() - Converts a string to a double-precision floating-point value.
atoi() - Converts a string to an integer.
atol() - Converts a string to a long integer.
strtod() - Converts a string to a double-precision floating-point value and reports any "leftover" numbers that could not be converted.
strtol() - Converts a string to a long integer and reports any "leftover" numbers that could not be converted.
strtoul() - Converts a string to an unsigned long integer and reports any "leftover" numbers that could not be converted.

Sometimes, you might want to trap overflow errors that can occur when converting a string to a number that results in an overflow condition. The following program shows an example of the strtoul() function, which traps this overflow condition:

 

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
void main(void);
void main(void)
{
     char* str  = "1234567891011121314151617181920";
     unsigned long num;
     char* leftover;
     num = strtoul(str, &leftover, 10);
     printf("Original string:      %s\n", str);
     printf("Converted number:     %lu\n", num);
     printf("Leftover characters:  %s\n", leftover);
}

 

In this example, the string to be converted is much too large to fit into an unsigned long integer variable. The strtoul() function therefore returns ULONG_MAX (4294967295) and sets the char* leftover to point to the character in the string that caused it to overflow. It also sets the global variable errno to ERANGE to notify the caller of the function that an overflow condition has occurred. The strtod() and strtol() functions work exactly the same way as the strtoul() function shown above. Refer to your C compiler documentation for more information regarding the syntax of these functions.


9. How can you tell whether two strings are the same?

The standard C library provides several functions to compare two strings to see whether they are the same. One of these functions, strcmp(), is used here to show how this task is accomplished:

 

#include <stdio.h>
#include <string.h>
void main(void);
void main(void)
{
     char* str_1 = "abc";
     char* str_2 = "abc";
     char* str_3 = "ABC";
     if (strcmp(str_1, str_2) == 0)
          printf("str_1 is equal to str_2.\n");
     else
          printf("str_1 is not equal to str_2.\n");
     if (strcmp(str_1, str_3) == 0)
          printf("str_1 is equal to str_3.\n");
     else
          printf("str_1 is not equal to str_3.\n");
}

 

This program produces the following output:

str_1 is equal to str_2.

str_1 is not equal to str_3.

Notice that the strcmp() function is passed two arguments that correspond to the two strings you want to compare. It performs a case-sensitive lexicographic comparison of the two strings and returns one of the following values:

 

Return Value   Meaning
<0 - The first string is less than the second string.
0 - The two strings are equal.
>0 - The first string is greater than the second string.

In the preceding example code, strcmp() returns 0 when comparing str_1 (which is "abc") and str_2(which is "abc"). However, when comparing str_1 (which is "abc") with str_3 (which is "ABC"), strcmp()returns a value greater than 0, because the string "ABC" is greater than (in ASCII order) the string "abc".

Many variations of the strcmp() function perform the same basic function (comparing two strings), but with slight differences. The following table lists some of the functions available that are similar to strcmp():

 

Function Name   Description
strcmp() - Case-sensitive comparison of two strings
strcmpi() - Case-insensitive comparison of two strings
stricmp() - Same as strcmpi()
strncmp() - Case-sensitive comparison of a portion of two strings
strnicmp() - Case-insensitive comparison of a portion of two strings

Looking at the example provided previously, if you were to replace the call to strcmp() with a call tostrcmpi() (a case-insensitive version of strcmp()), the two strings "abc" and "ABC" would be reported as being equal.


10. How do you print only part of a string?

The following program shows how to print only part of a string using the printf() function:

 

#include <stdio.h>
#include <string.h>
void main(void);
void main(void)
{
     char* source_str = "THIS IS THE SOURCE STRING";
     /* Use printf() to print the first 11 characters of source_str. */
     printf("First 11 characters: '.11s'\n", source_str);
     /* Use printf() to print only the
        last 13 characters of source_str. */
     printf("Last 13 characters: '.13s'\n",
                 source_str + (strlen(source_str) - 13));
}

 

This example program produces the following output:

First 11 characters: 'THIS IS THE'

Last 13 characters: 'SOURCE STRING'

The first call to printf() uses the argument ".11s" to force the printf() function to make the output exactly 11 characters long. Because the source string is longer than 11 characters, it is truncated, and only the first 11 characters are printed. The second call to printf() is a bit more tricky. The total length of thesource_str string is calculated (using the strlen() function). Then, 13 (the number of characters you want to print) is subtracted from the total length of source_str.

This gives the number of remaining characters in source_str. This number is then added to the address of source_str to give a pointer to an address in the source string that is 13 characters from the end of source_str. By using the argument ".13s", the program forces the output to be exactly 13 characters long, and thus the last 13 characters of the string are printed.

Dynamic Test

Content Category

Related Searches

Sample Paper

,

Strings (Part - 3)

,

Semester Notes

,

Strings (Part - 3)

,

study material

,

Extra Questions

,

MCQs

,

Objective type Questions

,

practice quizzes

,

ppt

,

Exam

,

C Programming Interview Questions Quant Notes | EduRev

,

shortcuts and tricks

,

Summary

,

Viva Questions

,

Previous Year Questions with Solutions

,

past year papers

,

video lectures

,

C Programming Interview Questions Quant Notes | EduRev

,

Free

,

pdf

,

Important questions

,

Strings (Part - 3)

,

mock tests for examination

,

C Programming Interview Questions Quant Notes | EduRev

;