Kopiowanie tablicy i ucinanie znakow

0

Witam mam problem, Napisalem funkcje ktora zamienia male litery na duze i duze litery na male, jednak gdy zapisuje zmieniona tablice to jesli jest mniejsza niz zadeklarowany rozmiar to pozostale wartosci sa domyslnie wypelnione, przez co dziwne znaki znajduja sie w niej.

Moglbym zaalokowac pamiec na tablice ale nie moge korzystac z stdlib.h i string.h.
Jak moge zwrocic wskaznik do wynikowej tablicy i uciac zbedne wartosci?

w mainie uzylem funkcji ktora wypisuje po prostu do danego momentu ale to nie zmienia faktu ze funkcja change_letter_size nie dziala pomyslnie.

 while (*(dest + i) != '\n') {
        printf("%c", *(dest + i));
        i++;
    }
#include <stdio.h>


char* change_letter_size(char* dest, const char* src);

int main()
{
    char dest1[1001], src2[1001];
    char *dest = dest1;
    char *src = src2;
    int i = 0;

    printf("Podaj tekst: ");
    fgets(src2, 1001, stdin);


    change_letter_size(dest,src);

    while (*(dest + i) != '\n') {
        printf("%c", *(dest + i));
        i++;
    }

}

char* change_letter_size(char* dest, const char* src)
{
    if (dest == NULL || src == NULL) return NULL;
    int i = 0, j = 0;

    while (*(src + i) != '\0') {
        *(dest + i) = *(src + i);
        i++;
    }

    while (j < i) {
        if (*(dest + j) >= 'a' && *(dest + j) <= 'z')  *(dest + j) -= 32;
        else if (*(dest + j) >= 'A' && *(dest + j) <= 'Z')  *(dest + j) += 32;
        j++;
    }

    return dest;
}



powinno byc 
iNFORMATION TECHNOLOGY DEPARTMENTS MUST SPEND ENORMOUS AMOUNTS OF TIME AND MONEY WORRYING ABOUT INTEGRATING BIG COMPUTER SYSTEMS WITH BILLIONS OF PIECES OF CUSTOMER DATA. - aLEX bERENSON, 
a jest
 iNFORMATION TECHNOLOGY DEPARTMENTS MUST SPEND ENORMOUS AMOUNTS OF TIME AND MONEY WORRYING ABOUT INTEGRATING BIG COMPUTER SYSTEMS WITH BILLIONS OF PIECES OF CUSTOMER DATA. - aLEX bERENSON╠╠╠╠╠╠╠╠╠╠(|"
0

Poprawilem i dziala, aczkolwiek wydaje mi sie ze ten kod nie jest za ladny, moglobybyc lepiej napisane. Czy ktos moglby zooptymalizowac moj kod ? Samemu nie wiem jak inaczej napisac, ale wiem ze pewnie ktos by sie znalazl. Chodzi o to zebym sie nauczyl lepiej pisac niz zawsze pisal taka ciapke.

#include <stdio.h>


char* change_letter_size(char* dest, const char* src);

int main()
{
    char dest1[1001], src2[1001];
    char* dest = dest1, * src = src2;
    int i = 0;

    printf("Podaj tekst: ");
    fgets(src2, 1001, stdin);

    change_letter_size(dest, src);

    while (*(dest + i) != '\0') {
        printf("%c", *(dest + i));
        i++;
    }
}

char* change_letter_size(char* dest, const char* src)
{
    if (dest == NULL || src == NULL) return NULL;

    int i = 0, j = 0;
    char *h = "";

    while (*(src + i) != '\0' && *(src + i) != *h) {
        *(dest + i) = *(src + i);
        i++;
    }

    while (j < i) {
        if (*(dest + j) >= 'a' && *(dest + j) <= 'z')  *(dest + j) -= 32;
        else if (*(dest + j) >= 'A' && *(dest + j) <= 'Z')  *(dest + j) += 32;
        j++;
    }
    *(dest + j) = '\0';

    return dest;
}



0
simonsoft napisał(a):
    if (*(dest + j) >= 'a' && *(dest + j) <= 'z')  *(dest + j) -= 32;

Dlaczego wszędzie piszesz *(dest + j) zamiast po prostu dest[j]?
W ten sposób kod będzie dużo czytelniejszy.

0
Azarien napisał(a):
simonsoft napisał(a):
    if (*(dest + j) >= 'a' && *(dest + j) <= 'z')  *(dest + j) -= 32;

Dlaczego wszędzie piszesz *(dest + j) zamiast po prostu dest[j]?
W ten sposób kod będzie dużo czytelniejszy.

Bo wszedzie musze dzialac na wskaznikach, uwierz mi ze mam juz tego potąd..

1

Nic nie stoi na przeszkodzie, żeby scalić ze sobą te dwie pętle.

1 użytkowników online, w tym zalogowanych: 0, gości: 1