Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <assert.h>
- #include <stdlib.h>
- /*
- * Retourne la plus petite valeur entre :
- * - 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.
- * - maxlen
- *
- * L'implémentation garantie qu'aucun octet au-delà de s+maxlen n'est accédé.
- */
- size_t iutna_strnlen(const char* str, size_t maxlen)
- {
- int i=0;
- while(str[i]!='\0' && i<maxlen){
- i++;
- }
- return i;
- }
- /*
- * Compare les len premiers octets des chaînes s1 et s2 selon l'ordre établit
- * par la relation < sur les caractères. * La comparaison s'arrête dès qu'un
- * caractère est différent, que len caractères ont été comparés, ou que les deux
- * chaînes ont été parcourues jusqu'à un marqueur de fin de chaîne.
- *
- * Le résultat est :
- * - 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.
- * - nul si les chaînes s1 et s2 sont identiques ou si leurs len premiers caractères sont identifiques.
- * - 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.
- */
- int iutna_strncmp(const char* s1, const char* s2, size_t len)
- {
- int cpt=0;
- if(len==0){
- return 0;
- }
- while(cpt<len && s1[cpt]==s2[cpt] && s1[cpt]!='\0'){
- cpt++;
- }
- if(cpt==len){
- return 0;
- } else {
- if(s1[cpt]<s2[cpt]){
- return -1;
- } else {
- if(s1[cpt]==s2[cpt]){
- return 0;
- } else {
- return 1;
- }
- }
- }
- }
- /*
- * Copie les min(k,n) octets à l'adresse src vers l'adresse dst, où k est la
- * longueur de la chaîne commençant à l'adresse src, en comptant le marqueur de
- * fin de chaîne.
- *
- * Attention, si n < k, la chaîne à l'adresse dst ne comporte pas de marqueur de fin de chaîne.
- * En revanche, si k < n, n-k octets nuls sont ajoutés à la destination.
- *
- * La valeur retournée est un pointeur vers le début de la chaîne destination.
- */
- char* iutna_strncpy(char* dest, const char* src, size_t n)
- {
- return NULL;
- }
- int main(void)
- {
- // test cases for iutna_strnlen
- assert(iutna_strnlen("", 0) == 0);
- assert(iutna_strnlen("", 1) == 0);
- assert(iutna_strnlen("", 3) == 0);
- assert(iutna_strnlen("a", 0) == 0);
- assert(iutna_strnlen("a", 1) == 1);
- assert(iutna_strnlen("a", 3) == 1);
- assert(iutna_strnlen("0123456789", 0) == 0);
- assert(iutna_strnlen("0123456789", 1) == 1);
- assert(iutna_strnlen("0123456789", 3) == 3);
- assert(iutna_strnlen("0123456789", 10) == 10);
- assert(iutna_strnlen("0123456789", 11) == 10);
- assert(iutna_strnlen("0123456789", 20) == 10);
- // test cases for iutna_strncmp
- assert(iutna_strncmp("", "abc", 3) < 0);
- assert(iutna_strncmp("abc", "", 3) > 0);
- assert(iutna_strncmp("abc", "", 0) == 0);
- assert(iutna_strncmp("abc","abd", 4) < 0);
- assert(iutna_strncmp("abc","abd", 3) < 0);
- assert(iutna_strncmp("abc","abd", 2) == 0);
- assert(iutna_strncmp("abc","abd", 0) == 0);
- assert(iutna_strncmp("abd","abc", 4) > 0);
- assert(iutna_strncmp("abd","abc", 3) > 0);
- assert(iutna_strncmp("abd","abc", 2) == 0);
- assert(iutna_strncmp("abd","abc", 0) == 0);
- assert(iutna_strncmp("cba","dba", 4) < 0);
- assert(iutna_strncmp("cba","dba", 3) < 0);
- assert(iutna_strncmp("cba","dba", 2) < 0);
- assert(iutna_strncmp("cba","dba", 0) == 0);
- assert(iutna_strncmp("dba","cba", 4) > 0);
- assert(iutna_strncmp("dba","cba", 3) > 0);
- assert(iutna_strncmp("dba","cba", 2) > 0);
- assert(iutna_strncmp("dba","cba", 0) == 0);
- assert(iutna_strncmp("dba\0abc", "dba\0dba", 6) == 0);
- // char buffer[20];
- // assert(iutna_strncmp("abc", iutna_strncpy(buffer, "abc", 4), 20) == 0);
- // assert(iutna_strncmp("abc", iutna_strncpy(buffer, "abc", 2), 20) == 0);
- // assert(iutna_strncmp("", iutna_strncpy(buffer, "", 20), 20) == 0);
- // assert(iutna_strncmp("abc", iutna_strncpy(buffer, "abcdefghi", 3), 20) == 0);
- // assert(iutna_strncmp("abc", iutna_strncpy(buffer, "abcdefghi", 4), 20) != 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement