SHARE
TWEET

Untitled

a guest Jan 24th, 2020 100 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <assert.h>
  2. #include <stdlib.h>
  3.  
  4. /*
  5.  * Retourne la plus petite valeur entre :
  6.  *   - Le nombre d'octet entre le début de la chaîne pointée par str et le premier marqueur de fin de chaîne.
  7.  *   - maxlen
  8.  *
  9.  *   L'implémentation garantie qu'aucun octet au-delà de s+maxlen n'est accédé.
  10.  */
  11. size_t iutna_strnlen(const char* str, size_t maxlen)
  12. {
  13.     int i=0;
  14.     while(str[i]!='\0' && i<maxlen){
  15.         i++;
  16.     }
  17.     return i;
  18. }
  19.  
  20. /*
  21.  * Compare les len premiers octets des chaînes s1 et s2 selon l'ordre établit
  22.  * par la relation < sur les caractères. * La comparaison s'arrête dès qu'un
  23.  * caractère est différent, que len caractères ont été comparés, ou que les deux
  24.  * chaînes ont été parcourues jusqu'à un marqueur de fin de chaîne.
  25.  *
  26.  * Le résultat est :
  27.  *   - strictement négatif si les k premiers caractères de s1 et s2 sont identiques et le k+1ème caractère de s1 est plus petit que celui de s2, pour k <= len-1.
  28.  *   - nul si les chaînes s1 et s2 sont identiques ou si leurs len premiers caractères sont identifiques.
  29.  *   - strictement positif si les k premiers caractères de s1 et s2 sont identiques et le k+1ème caractère de s1 est plus grand que celui de s2 , pour k <= len-1.
  30.  */
  31. int iutna_strncmp(const char* s1, const char* s2, size_t len)
  32. {
  33.     int cpt=0;
  34.     if(len==0){
  35.         return 0;
  36.     }
  37.     while(cpt<len && s1[cpt]==s2[cpt] && s1[cpt]!='\0'){
  38.         cpt++;
  39.     }
  40.     if(cpt==len){
  41.         return 0;
  42.     } else {
  43.         if(s1[cpt]<s2[cpt]){
  44.             return -1;
  45.         } else {
  46.             if(s1[cpt]==s2[cpt]){
  47.                 return 0;
  48.             } else {
  49.                 return 1;
  50.             }
  51.         }
  52.     }
  53. }
  54.  
  55. /*
  56.  * Copie les min(k,n) octets à l'adresse src vers l'adresse dst, où k est la
  57.  * longueur de la chaîne commençant à l'adresse src, en comptant le marqueur de
  58.  * fin de chaîne.
  59.  *
  60.  * Attention, si n < k, la chaîne à l'adresse dst ne comporte pas de marqueur de fin de chaîne.
  61.  * En revanche, si k < n, n-k octets nuls sont ajoutés à la destination.
  62.  *
  63.  * La valeur retournée est un pointeur vers le début de la chaîne destination.
  64.  */
  65. char* iutna_strncpy(char* dest, const char* src, size_t n)
  66. {
  67.    
  68.     return NULL;
  69. }
  70.  
  71. int main(void)
  72. {
  73.     // test cases for iutna_strnlen
  74.     assert(iutna_strnlen("", 0) == 0);
  75.     assert(iutna_strnlen("", 1) == 0);
  76.     assert(iutna_strnlen("", 3) == 0);
  77.     assert(iutna_strnlen("a", 0) == 0);
  78.     assert(iutna_strnlen("a", 1) == 1);
  79.     assert(iutna_strnlen("a", 3) == 1);
  80.     assert(iutna_strnlen("0123456789", 0) == 0);
  81.     assert(iutna_strnlen("0123456789", 1) == 1);
  82.     assert(iutna_strnlen("0123456789", 3) == 3);
  83.     assert(iutna_strnlen("0123456789", 10) == 10);
  84.     assert(iutna_strnlen("0123456789", 11) == 10);
  85.     assert(iutna_strnlen("0123456789", 20) == 10);
  86.  
  87.     // test cases for iutna_strncmp
  88.     assert(iutna_strncmp("", "abc", 3) < 0);
  89.     assert(iutna_strncmp("abc", "", 3) > 0);
  90.     assert(iutna_strncmp("abc", "", 0) == 0);
  91.     assert(iutna_strncmp("abc","abd", 4) < 0);
  92.     assert(iutna_strncmp("abc","abd", 3) < 0);
  93.     assert(iutna_strncmp("abc","abd", 2) == 0);
  94.     assert(iutna_strncmp("abc","abd", 0) == 0);
  95.     assert(iutna_strncmp("abd","abc", 4) > 0);
  96.     assert(iutna_strncmp("abd","abc", 3) > 0);
  97.     assert(iutna_strncmp("abd","abc", 2) == 0);
  98.     assert(iutna_strncmp("abd","abc", 0) == 0);
  99.     assert(iutna_strncmp("cba","dba", 4) < 0);
  100.     assert(iutna_strncmp("cba","dba", 3) < 0);
  101.     assert(iutna_strncmp("cba","dba", 2) < 0);
  102.     assert(iutna_strncmp("cba","dba", 0) == 0);
  103.     assert(iutna_strncmp("dba","cba", 4) > 0);
  104.     assert(iutna_strncmp("dba","cba", 3) > 0);
  105.     assert(iutna_strncmp("dba","cba", 2) > 0);
  106.     assert(iutna_strncmp("dba","cba", 0) == 0);
  107.     assert(iutna_strncmp("dba\0abc", "dba\0dba", 6) == 0);
  108.  
  109.     // char buffer[20];
  110.     // assert(iutna_strncmp("abc", iutna_strncpy(buffer, "abc", 4), 20) == 0);
  111.     // assert(iutna_strncmp("abc", iutna_strncpy(buffer, "abc", 2), 20) == 0);
  112.     // assert(iutna_strncmp("", iutna_strncpy(buffer, "", 20), 20) == 0);
  113.     // assert(iutna_strncmp("abc", iutna_strncpy(buffer, "abcdefghi", 3), 20) == 0);
  114.     // assert(iutna_strncmp("abc", iutna_strncpy(buffer, "abcdefghi", 4), 20) != 0);
  115.  
  116. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top