next up previous contents
Next: Probleme propuse Up: Caractere, siruri de caractere. Previous: Observatii asupra sirurilor de   Cuprins


Probleme rezolvate

  1. Sa se implementeze în doua moduri functia strcmp.

       
    int strcmp(char *s1, char *s2)
    {
      int i;
            
      for (i=0; s1[i]||s2[i]; i++)
        if (s1[i]<s2[i])
          return -1;
        else
          if (s1[i]>s2[i])       
            return 1;
      return 0;
    }
    
        
    int strcmp(char *s1, char *s2)
    {
      int i;
    
      for (i=0; s1[i]||s2[i]; i++)
        if (s1[i]!=s2[i])
          break;
      return s1[i]-s2[i];
    }
    

  2. Sa se implementeze functia strcpy.

    char *strcpy(char *d, char *s)
    {
       int i=0;
       while (s[i])
       {  /* nu s-a ajuns la sfarsitul sirului s */
          d[i]=s[i]; 
          i++;
       }
       d[i]='\0';
       return d;
    }
    

  3. Sa se scrie o functie care converteste un caracter reprezentând o cifra hexazecimala în echivalentul întreg zecimal.
    int hexa (char c)
    {
       if (isalpha(c))
          return toupper(c)-'A'+10;
       return c-'0';
    }
    

  4. Sa se scrie o functie care verifica daca un sir de caractere este compus în întregime din cifre. Folosind aceasta functie, sa se scrie un program care citeste de la intrare siruri de caractere (câte unul pe fiecare linie) pâna la întâlnirea caracterului EOF si afiseaza inversat (de la dreapta la stânga) fiecare sir citit, exceptând sirurile compuse doar din cifre, care se vor afisa nemodificate.
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    int numar(char * s)
    {
      int i=0;
    
      while(s[i])
        if (!isdigit(s[i++]))
          return 0; /* s-a gasit un caracter non-cifra */
      return 1; /* toate caraterele sunt cifre */
    }
    
    void main(void)
    {
      char sir[80], c;
      short i, j;
    
      while (gets(sir)!=NULL)
        { 
          if (!numar(sir))
    
         /* se interschimba prin intermediul lui c elementele
          aflate pe pozitii simetrice in raport cu mijlocul sirului */
    
            for (i=0, j=strlen(sir)-1; i<j; ++i, --j)
              c=sir[i], sir[i]=sir[j], sir[j]=c;
          puts(sir);  
        }
    }
    



Cristian Gavrila 2001-10-02