Introducerea argumentelor si sortarea lexicografica
:: Diverse :: Programare :: Tutoriale
Pagina 1 din 1
Introducerea argumentelor si sortarea lexicografica
1.Introducerea argumentelor pe linia de comanda
a) Afisarea argumentelor introduse pe linia de comanda
b)Afisarea liniilor (introduse de la tastatura) care contin un sir de caractere introdus pe linia de comanda
2. Sortarea lexicografica a liniilor (siruri de caractere) introduse de la tastatura
a) continutul fisierului alloc.c
b) continutul fisierului getline.c
c) continutul fisierului sort_str.c
a) Afisarea argumentelor introduse pe linia de comanda
- Cod:
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
for(i=0;i<argc;i++)
printf("%s\n",argv[i]);
return 0;
}
b)Afisarea liniilor (introduse de la tastatura) care contin un sir de caractere introdus pe linia de comanda
- Cod:
#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
/* find: print lines that match pattern from 1st arg */
int main(int argc, char *argv[])
{
char line[MAXLINE];
int found = 0;
if (argc != 2)
printf("Usage: find pattern\n");
else
while (gets(line) != NULL)
if (strstr(line, argv[1]) != NULL) {
printf("%s", line);
found++;
}
return found;
}
2. Sortarea lexicografica a liniilor (siruri de caractere) introduse de la tastatura
a) continutul fisierului alloc.c
- Cod:
#define ALLOCSIZE 10000 /* size of available space */
static char allocbuf[ALLOCSIZE]; /* storage for alloc */
static char *allocp = allocbuf; /* next free position */
char *alloc(int n) /* return pointer to n characters */
{
if (allocbuf + ALLOCSIZE - allocp >= n) { /* it fits */
allocp += n;
return allocp - n; /* old p */
} else /* not enough room */
return 0;
}
void afree(char *p) /* free storage pointed to by p */
{
if (p >= allocbuf && p < allocbuf + ALLOCSIZE)
allocp = p;
}
b) continutul fisierului getline.c
- Cod:
#include<stdio.h>
/* getline: read a line into s, return length */
int getline(char s[],int lim)
{
int c, i;
for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
c) continutul fisierului sort_str.c
- Cod:
#include <stdio.h>
#include <string.h>
#define MAXLINES 5000 /* max #lines to be sorted */
char *lineptr[MAXLINES]; /* pointers to text lines */
int readlines(char *lineptr[], int nlines);
void writelines(char *lineptr[], int nlines);
void qsort(char *lineptr[], int left, int right);
/* sort input lines */
int main()
{
int nlines; /* number of input lines read */
if ((nlines = readlines(lineptr, MAXLINES)) >= 0) {
qsort(lineptr, 0, nlines-1);
writelines(lineptr, nlines);
return 0;
} else {
printf("error: input too big to sort\n");
return 1;
}
}
#define MAXLEN 1000 /* max length of any input line */
int getline(char *, int);
char *alloc(int);
/* readlines: read input lines */
int readlines(char *lineptr[], int maxlines)
{
int len, nlines;
char *p, line[MAXLEN];
nlines = 0;
while ((len = getline(line, MAXLEN)) > 0)
if (nlines >= maxlines || (p = alloc(len)) == NULL)
return -1;
else {
line[len-1] = '\0'; /* delete newline */
strcpy(p, line);
lineptr[nlines++] = p;
}
return nlines;
}
/* writelines: write output lines */
void writelines(char *lineptr[], int nlines)
{
int i;
for (i = 0; i < nlines; i++)
printf("%s\n", lineptr[i]);
}
/* qsort: sort v[left]...v[right] into increasing order */
void qsort(char *v[], int left, int right)
{
int i, last;
void swap(char *v[], int i, int j);
if (left >= right) /* do nothing if array contains */
return; /* fewer than two elements */
swap(v, left, (left + right)/2);
last = left;
for (i = left+1; i <= right; i++)
if (strcmp(v[i], v[left]) < 0)
swap(v, ++last, i);
swap(v, left, last);
qsort(v, left, last-1);
qsort(v, last+1, right);
}
void swap(char *v[], int i, int j){
char *temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
BABILONIA- Membru, skill +10
- Mesaje : 644
Data de inscriere : 29/08/2012
Varsta : 27
Localizare : Bucuresti
:: Diverse :: Programare :: Tutoriale
Pagina 1 din 1
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum
|
|