Tuesday, 16 October 2012

String




A string in C is simply an array of characters. The following line declares an array that can hold a string of up to 99 characters.
char str[100];
It holds characters as you would expect: str[0] is the first character of the string, str[1] is the second character, and so on. But why is a 100-element array unable to hold up to 100 characters? Because C uses null-terminated strings, which means that the end of any string is marked by the ASCII value 0 (the null character), which is also represented in C as '\0'.
The string I/0 operations (gets, puts, and so on) are implemented in <stdio.h>, and a set of fairly simple string manipulation functions are implemented in <string.h> (on some systems, <strings.h> ).
#include<stdio.h>
#include<string.h>
 
void main()
{
    char name[100];
 
    printf("Enter your name:");
    gets(name);
 
    printf("Assalamualikum mr/ms:");
    puts(name);
}
Hint : is same as :
#include<stdio.h>
#include<string.h>
 
void main()
{
    char name[100];
 
    printf("Enter your name:");
    scanf(%s,name);
 
    printf("Assalamualikum mr/ms:%s",name);
    
}

If you want to copy the contents of one string to another, the string library (<string.h> or <strings.h> ) contains a function called strcpy for this task.
char s[100];
strcpy(s, "yosof");
The following code shows how to use strcpy in C:
#include<stdio.h>
#include<string.h>
 
void main()
{
    char s1[100],s2[100];
 
    strcpy(s1,"yosof"); /* copy "yosof" into s1 */
    printf("s1 is %s\n",s1);
 
    strcpy(s2,s1);      /* copy s1 into s2 */
    printf("s2 is %s\n",s2);
}
strcpy is used whenever a string is initialized in C. You use the strcmp function in the string library to compare two strings. It returns an integer that indicates the result of the comparison. Zero means the two strings are equal, a negative value means that s1 is less than s2, and a positive value means s1 is greater than s2.
#include <stdio.h>
#include <string.h>

void  main()
{

      char s1[100],s2[100];

      printf("Enter value for s1:");
      gets(s1);

      printf("Enter value for s2");
      gets(s2);

      if (strcmp(s1,s2)==0)
      {
            printf("equal\n");
      }
      else if (strcmp(s1,s2)<0)
      {
            printf("s1 less than s2\n");
      }
      else
      {
            printf("s1 greater than s2\n");
      }
}

Other common functions in the string library include strlen, which returns the length of a string, and strcat which concatenates two strings.
#include<stdio.h>
#include <string.h>
void main()
{
    char stringOne[255];
    char stringTwo[255];

    stringOne[0]='\0';
    stringTwo[0]='\0';

    printf("Enter a string:");
    gets(stringOne);

    printf("Enter a second string:");
    gets(stringTwo);


    printf("String One: %s\n",stringOne);
    printf("String Two: %s\n",stringTwo);


    strcat(stringOne," ");
    printf("String One: %s\n",stringOne);
   
    strncat(stringOne,stringTwo,10);
    printf("String One: %s\n",stringOne);
    printf("String Two: %s\n",stringTwo);
}

#include<stdio.h>
#include <string.h>


void main()
{

      int length;
      char name[100];

      printf("Enter your name:");
      gets(name);

      length=strlen(name);

      printf("For %s no of character is %d\n",name,length);

}

Arrays



Arrays
 
Array is data structure used to share multiple data elements under a single name declaration. 
It's important that every single element of data, we wish to assign to array, belongs to the same data type. 
Arrayâ's elements are easily accessed - 
we use index; a number that must be nonnegative integer (constant, variable, integer expression). 
Element's index is a number between 0 and the number of elements minus one, including. In short: Index ( [0, NrOfElements-1].
 
 
Declaration of an array:
 
data_type array_name[index];
 
 
 
Array's definition in C:
 
int x[20] - array consisted of 20 integer numbers
char symbols[2] - array consisted of 2 characters
float sequence[MAX] - MAX is constant
 
 
 
Assigning element's values definition:
 
int array[ ] = {1, 2, 3};
array[0] = 1
array[1] = 2
array[2] = 3
 
int array [4] = {1, 2};
array[0] = 1
array[1] = 2
array[2] = 0
array[3] = 0
 
 
 
Accessing array's elements:
 
x[0] - first element of an array
sequence[i] -i. element of an array, 0 <= i <= NrOfElements-1
sequence[MAX-1] last element of an array
 
 
 
Common Wrong access to array's elements:
 
int array[10] = {0};
int x = sequence[10];
 
float a = 1.;
int x = array[a];
int a = 1, b = 0, c = 1;
int x = array[(a && b) - c];
 
 
 
 
Example:
 
Write your own program that asks user to input sequence of numbers, afterwards it calculates arithmetic middle of the given sequence. 
Program also prints numbers smaller than arithmetic middle, and afterwards prints numbers bigger than arithmetic middle.
 
 
 
#include <stdio.h>
#define DIMENSION 10
 
int main(void) {
 
int i;
  float sum = 0., arit_midd = 0., sequence[DIMENSION]={0};
  
  for (i = 0; i < DIMENSION; i++) {
 
    printf("Input number: ");
    scanf("%f",&sequence[i]);
    sum += sequence[i];
 
  } 
 
  arit_midd = sum / DIMENSION;
  printf("Arithmetic middle of the sequence is %6.2f.\n", arit_midd);
  for (i = 0; i < DIMENSION; i++) {
 
    if (sequence[i] < arit_midd) {
 
      printf("%6.2f is smaller than arithmetic middle.\n", sequence[i]);
 
    }
  }
 
  for (i = 0; i < DIMENSION; i++) {
 
    if (sequence[i] > arit_midd) {
 
      printf("%6.2f is bigger than arithmetic middle.\n", sequence[i]);
 
    }
  }
     
  // What happens if the number is equal to arithmetic middle?
 
}
 
  Example:
 
Write your own program that asks for input of sequence of numbers. After the program reads given numbers, 
it divides every number with the biggest sequence element and shows them in a way relative to the biggest element.
 
 
#include <stdio.h>
#define DIMENSION 10
 
int main(void) {
 
  int i;
  float max, array[DIMENSION]; 
 
  for (i = 0; i < DIMENSION; i++) {
 
    printf("array[%d] = ", i);
    scanf("%f",& array[i]);    
    if (i == 0) {
 
      max = array[i];
 
    }
    if (max < array[i]) {
 
      max = array[i];
 
    }
  } 
 
  printf("Biggest element in array is %f.\n\n", max);
  for (i = 0; i < DIMENSION; i++) {
 
    array[i] /= max;
    printf("array[%d] = %f\n", i, array[i]);
 
  }
}
 
 Example:
 
Compose your own program that reads given natural numbers that belong in [10, 99] interval and counts how many times each number showed up. 
Program stops reading numbers when element that doesn’t belong to interval is given. Af
afterwards, program prints each number from the interval that has showed at least once, and number of times it has really been given.
 
 
#include <stdio.h>
 
#define LL 10          /* lower limit of the interval */
#define UL 99          /* upper limit of the interval */
 
int main(void) {
 
  int number, i;
  int counter[UL – LL + 1] = { 0 };     
 
  do {
 
    printf("\nInput number from interval [%d, %d]: ", LL, UL);
    scanf("%d", &number);
    if (number >= LL && number <= UL) {
 
      counter[number - LL]++;
 
    }
 
  } while (number >= LL && number <= UL); 
 
  for (i = DG; i <= UL; i++) {
 
    if (counter[i - LL] > 0) {
 
      printf("\nNumber %d showed up %d times", i, counter [i - LL]);
 
    }
  }
}
Multi dimensional Arrays: Often there is a need to store and manipulate two dimensional data structure such as matrices & tables. Here the array has two subscripts. One subscript denotes the row & the other the column.


The declaration of two dimension arrays is as follows:
data_type array_name[row_size][column_size];
int m[10][20]

Here m is declared as a matrix having 10 rows( numbered from 0 to 9) and 20 columns(numbered 0 through 19). The first element of the matrix is m[0][0] and the last row last column is m[9][19]

Elements of multi dimension arrays:

A 2 dimensional array marks [4][3] is shown below figure. The first element is given by marks [0][0] contains 35.5 & second element is marks [0][1] and contains 40.5 and so on.

marks [0][0]
35.5

marks [0][1]
40.5

marks [0][2]
45.5

marks [1][0]
50.5

marks [1][1]
55.5

marks [1][2]
60.5

marks [2][0]

marks [2][1]

marks [2][2]

marks [3][0]

marks [3][1]

marks [3][2]


Initialization of multidimensional arrays:

Like the one dimension arrays, 2 dimension arrays may be initialized by following their declaration with a list of initial values enclosed in braces
Example:
int table[2][3]={0,0,0,1,1,1};
Initializes the elements of first row to zero and second row to 1. The initialization is done row by row. The above statement can be equivalently written as
int table[2][3]={{0,0,0},{1,1,1}}
By surrounding the elements of each row by braces.
C allows arrays of three or more dimensions. The compiler determines the maximum number of dimension. The general form of a multidimensional array declaration is:

date_type array_name[s1][s2][s3]…..[sn];
Where s is the size of the ith dimension. Some examples are:
int survey[3][5][12];
float table[5][4][5][3];

Survey is a 3 dimensional array declared to contain 180 integer elements. Similarly table is a four dimensional array containing 300 elements of floating point type.

/* example program to add two matrices & store the results in the 3rd matrix */
#include< stdio.h >

void main()
{
            int a[10][10],b[10][10],c[10][10],i,j,m,n,p,q;

            printf(“enter the order of the matrix\n”);
            scanf(“%d%d”,&p,&q);
 
            if(m==p && n==q)
            {
                        printf(“matrix can be added\nn”);
                        printf(“enter the elements of the matrix a”);
                        for(i=0;i < m;i++)
                                    for(j=0;j < n;j++)
                                    scanf(“%d”,&a[i][j]);

                        printf(“enter the elements of the matrix b”);

                        for(i=0;i < p;i++)
                                    for(j=0;j < q;j++)
                                    scanf(“%d”,&b[i][j]);
           
printf(“the sum of the matrix a and b is”);
for(i=0;i < m;i++)
            for(j=0;j < n;j++)
                        c[i][j]=a[i][j]+b[i][j];

for(i=0;i < m;i++)
{
            for(j=0;j < n;j++)
            printf(“%dt”,&a[i][j]);
            printf(“n”);
            }
}