C programming Language – Code snippets 3
Posted by danielApr 9
C programming Language – Code snippets
C Programming Language, 2nd Edition
Compiling and running the sample codes using gcc :
gcc sample.c -o sample ./sample
Chapter 3 – Control Flow
1. Trim whitespace
#include<stdio.h> #include<string.h> int main() { int n,i=0; char s[]=" HELLO THERE "; printf("Before trim:%s\n",s); for(n=strlen(s)-1; n>=0; n--) if(s[n]!=' ' && s[n]!='\t' && s[n]!='\n') break; s[n+1]='\0'; while(isspace(s[i++])); i=0; while(s[i]!='\0') s[i++]; s[i]='\0'; printf("After trim:%s\n",s); return n; }
2. Binary search
#include<stdio.h> int binsearch(int x, int v[], int n); int main(int argc, char *argv[]) { int size=argc,found; int counter=0,x, v[size-2]; x=atoi(argv[size-1]); if (argc<3) {printf("Usage: progname integer-list integer-to-be-searched\n"); return -1; } while(counter <= size-3) { v[counter]=atoi(argv[counter+1]); counter++; } (found=binsearch(x,v,size-2))!=-1 ? printf("Found=%d\n",v[found]): printf("Not found\n"); return 0; } int binsearch(int x, int v[], int n) { int low, high, mid; low=0; high=n-1; while(low<=high) { mid=(low+high)/2; if(x < v[mid]) high=mid-1; else if (x > v[mid]) low=mid+1; else return mid; } return -1; }
3. Integer to string with argument parsing.
#include<stdio.h> #include<stdlib.h> #include<string.h> #define SIZE 10 void itoa(int n, char s[]); void reverse(char s[]); int main(int argc, char *argv[]) { char s[SIZE]; int n; if(argc!=2) { printf("Usage: progrname integer\n"); return -1; } n=atoi(argv[1]); itoa(n,s); printf("String:%s\n",s); return 0; } void itoa(int n, char s[]) { int i, sign; if((sign=n)<0) n=-n; i=0; do { s[i++]=n%10 + '0'; } while( (n/=10)>0); if (sign<0) s[i++]='-'; s[i]='\0'; reverse(s); } void reverse(char s[]) { int c, i, j; for(i=0,j=strlen(s)-1; i<j; i++,j--) { c=s[i]; s[i]=s[j]; s[j]=c; } }
4. Reverse string and convert integer to string
#include<stdio.h> #include<string.h> #define SIZE 1000 void reverse(char s[]); void itoa(int n, char s[]); int main() { char s[SIZE]="HELLO WORLD!!"; reverse(s); printf("%s\n",s); itoa(87690,s); printf("%s\n",s); return 0; } void reverse(char s[]) { int c, i, j; for(i=0,j=strlen(s)-1; i<j; i++,j--) { c=s[i]; s[i]=s[j]; s[j]=c; } } void itoa(int n, char s[]) { int i, sign; if((sign=n)<0) n=-n; i=0; do { s[i++] = n%10 + '0'; } while((n/=10)>0); if(sign<0) s[i++] = '-'; s[i]='\0'; reverse(s); }
5. Command line argument parsing
#include<stdio.h> int main(int argc, char *argv[]) { int i,counter; printf("Number of arguments:%d\n",argc); printf("Arguments character-by-character\n"); for(counter=0;counter < argc ; counter++) { while(*argv[counter]) printf("%c ",*argv[counter]++); printf("\n"); } printf("\n"); return 0; }
6. Reverse a string
#include<stdio.h> #include<string.h> #define SIZE 1000 void reverse(char s[]); int main() { char s[SIZE]="HELLO WORLD!"; reverse(s); printf("%s\n",s); return 0; } void reverse(char s[]) { int c, i, j; for(i=0,j=strlen(s)-1; i<j; i++,j--) { c=s[i]; s[i]=s[j]; s[j]=c; } }
7. Sorting with shell sort method.
#include<stdio.h> #define SIZE 10 void shellsort(int v[], int n); int main() { int counter; int v[SIZE]={8,13,9,45,90,24,56,11,20,10}; shellsort(v,SIZE); for(counter=0; counter<SIZE; counter++) printf("%d ",v[counter]); printf("\n"); return 0; } void shellsort(int v[], int n) { int gap, i, j, temp; for(gap=n/2; gap>0; gap/=2) for(i=gap; i<n; i++) for(j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap) { temp=v[j]; v[j]=v[j+gap]; v[j+gap]=temp; } }
8. using switch case
#include<stdio.h> int main() { int c, i, nwhite, nother,alpha, ndigit[10]; nwhite=nother=alpha=0; for(i=0; i<10; i++) ndigit[i]=0; while((c=getchar())!=EOF) { switch(c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ndigit[c-'0']++; break; case ' ': case '\n': case '\t': nwhite++; break; default: nother++; break; } } printf("Digits ="); for(i=0; i<10; i++) printf(" %d", ndigit[i]); printf(", white space =%d, other = %d\n", nwhite, nother); return 0; }
9. Double input – strip out non integers
#include<stdio.h> #include<ctype.h> #define SIZE 10 int atoi(char s[]); int main(int argc, char *argv[]) { int counter=0; char s[SIZE]; if (argc!=2) { printf("Usage: progname integer\n"); return 1; } while(*argv[1]) s[counter++]=(*argv[1]++); printf("Twice Result=%d\n",2*atoi(s)); return 0; } int atoi(char s[]) { int n, i,sign; for(i=0; isspace(s[i]); i++); sign=(s[i]=='-')? -1: 1; if(s[i] == '+' || s[i] == '-') i++; for(n=0; isdigit(s[i]); i++) n=10*n + (s[i]-'0'); return sign*n; }
Reference –
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628#reader_0131103628
No comments
You must be logged in to post a comment.