Advertisement
Guest User

Untitled

a guest
Jan 24th, 2020
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.25 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement