Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Przepisanie napisu od tyłu

Ostatnio zmodyfikowano 2016-01-10 22:17
Autor Wiadomość
mimotego
Temat założony przez niniejszego użytkownika
[C] Przepisanie napisu od tyłu
» 2016-01-10 19:33:55
Cześć, chce napisać funkcję, która bez użycia żadnej funkcji bibliotecznej ma przepisać jeden napis do drugiego. Oto co udało mi się zrobić:
C/C++
#include<stdio.h>

void przepisanieNapisu( char * pierwszy, char * drugi ) {
    int i, j = 0, index = 0;
    for( i = 0; pierwszy[ i ] != '\0'; i++ ) index++;
   
    j = index;
    for( i = 0; i <= index; i++ ) {
        drugi[ i ] = pierwszy[ j ];
        j--;
        {
            printf( "%s", drugi );
        }
       
        int main() {
            char napis1[] = "Programuje w .NECIE juz trzecie stulecie";
            char napis2[ 200 ];
            przepisanieNapisu( napis1, napis2 );
            return 0;
        }

Jednak nie mam pojęcia dlaczego to przepisanie nie działa jak powinno. Kompilator wypisuje mi: "expected declaration or statement at the end of input" w linii 19 czyli po return w main.
P-143334
Gibas11
» 2016-01-10 20:00:42
Klamry Ci się nie zgadzają, spójrz jak strona sformatowała kod.
P-143337
mimotego
Temat założony przez niniejszego użytkownika
» 2016-01-10 20:06:42
Faktycznie, nie zauważyłem. Wielkie dzięki. Jednak w dalszym ciągu mój napis nie chce się przepisywać... . Może coś jest nie tak z deklaracją tablic w mainie?
P-143340
mateczek
» 2016-01-10 20:08:54
deklaracja jest w porządku zwróć uwagę jaki jest znak końcowy napisu który kopiujesz :P!!!!
i dlaczego '/0' ląduje na początku napisu dwa??:P

https://www.youtube.com/watch​?v=L9JvSHYLvuw
P-143341
mimotego
Temat założony przez niniejszego użytkownika
» 2016-01-10 20:18:36
No i działa :P Wielkie dzięki! Trochę głupio, bo błąd banalny a tak się męczyłem :| Wrzucam jeszcze poprawiony kod, może komuś się przyda.
C/C++
#include<stdio.h>

void przepisanieNapisu( char * pierwszy, char * drugi ) {
    int i, j = 0, index = 0;
    for( i = 0; pierwszy[ i ] != '\0'; i++ ) index++;
   
    j = index - 1;
    for( i = 0; i < index; i++ ) {
        drugi[ i ] = pierwszy[ j ];
        j--;
    }
    printf( "%s", drugi );
}

int main() {
    char napis1[] = "Programuje w .NECIE juz trzecie stulecie";
    char napis2[ 200 ];
    przepisanieNapisu( napis1, napis2 );
    return 0;
}
P-143346
mateczek
» 2016-01-10 20:23:46
jeszcze o czymś zapomiałeś :P

C/C++
#include<stdio.h>

void przepisanieNapisu( char * pierwszy, char * drugi ) {
    int i, j = 0, index = 0;
    for( i = 0; pierwszy[ i ] != '\0'; i++ ) index++;
   
    j = index - 1;
    for( i = 0; i < index; i++ ) {
        drugi[ i ] = pierwszy[ j ];
        j--;
    }
    printf( "%s", drugi );
}

int main() {
    char napis1[] = "Programuje w .NECIE juz trzecie stulecie";
    char napis2[ 200 ] = "11111111111111111111111111111111111111111111111111111111111111111111111111";
    przepisanieNapisu( napis1, napis2 );
    return 0;
}
P-143347
mimotego
Temat założony przez niniejszego użytkownika
» 2016-01-10 21:26:17
No tak :) Tylko jak to zrobić bez przekazania wskaźnika na rozmiar jako parametr???
P-143348
mateczek
» 2016-01-10 22:05:29
C/C++
#include<stdio.h>

void przepisanieNapisu( char * pierwszy, char * drugi ) {
    int i, j = 0, index = 0;
    for( i = 0; pierwszy[ i ] != '\0'; i++ ) index++;
   
    j = index - 1;
    for( i = 0; i < index; i++ ) {
        drugi[ i ] = pierwszy[ j ];
        j--;
    }
    drugi[ index ] = '\0'; // trzeba dać zero na końcu! napisy w stylu c powinny kończyć się zerem
    printf( "%s", drugi ); // funkcja prinf leci, aż spotka zero. Stąd jeśli pamięć jest zaśmiecona nie kończy czytać!!!
}

int main() {
    char napis1[] = "Programuje w .NECIE juz trzecie stulecie";
    char napis2[ 200 ] = "11111111111111111111111111111111111111111111111111111111111111111111111111";
    przepisanieNapisu( napis1, napis2 );
    return 0;
}
P-143354
« 1 » 2
  Strona 1 z 2 Następna strona