Avatar billede siul Nybegynder
02. marts 2002 - 00:33 Der er 10 kommentarer og
1 løsning

function stringcat

Hej,
Jeg er igang med at lave en function
void stringcat(char [], char[]);
Mine test cases cases skal teste concatenationen af en null string og kopiere variabler og konstanter. Functionen skal derudover kopiere indeholdet af nummer to character array til slutningen af den foerste.

Er der nogle der kan hjaelpe mig med det?
Paa forhaand tak!
Avatar billede siul Nybegynder
03. marts 2002 - 11:34 #1
ups! Jeg glemte at tilfoeje at strcpy() eller strlen() eller strcat() ikke maa benyttes og at det er derfor jeg er gaaet i staa.
Avatar billede chries Nybegynder
03. marts 2002 - 18:34 #2
>Mine test cases cases skal teste concatenationen af en null string og
>kopiere variabler og konstanter

Lidt mere/bredre forklaring hvad du mener med det.

>Functionen skal derudover kopiere indeholdet af nummer to character
>array til slutningen af den foerste

Kræver at der er plads i den første til den samlede streng af begge kan være der. Er der det, eller skal der ikke meldes fejl på det ?
Avatar billede siul Nybegynder
03. marts 2002 - 20:10 #3
Hej Chries
Du har ret i at det betyder at der er plads i den foerste til den samlede streng og at det er det der skal testes for at der bliver kopieret ind i den foerste hvor der bliver taget hensyn til NULL strengen.
Haaber du kan hjaelpe med det ;0)
Avatar billede chries Nybegynder
03. marts 2002 - 22:29 #4
Er ikke helt med, men her er noget du kan ønske forbedringer i :-)

#include "stdafx.h"
#include "iostream.h"
#include "time.h"
#include "stdlib.h"
#include "stdio.h"

// skal være nul termineret
int strlen( const char str[] )
{
    int i=0;

    while( true )
    {
        if( str[i] == '\0' )
        {
            return i; // størrelse uden nul terminering
        }

        i++;
    }
}

void strcat( char str_a[], const char str_b[] )
{
    int a_size = strlen( str_a );
    int b_size = strlen( str_b );

    for( int i=0; i<b_size; i++ )
    {
        str_a[a_size+i] = str_b[i];
    }

    str_a[a_size+b_size+1] = '\0'; // terminer
}

void main()
{
    char streng_a[128] = "ostebolle";
    char streng_b[128] = " er godt!";

    cout << "str a: " << streng_a << endl;
    cout << "str b: " << streng_b << endl;


    strcat( streng_a, streng_b );

    cout << "strcat a: " << streng_a << endl;
    cout << "strcat b: " << streng_b << endl;
}
Avatar billede chries Nybegynder
03. marts 2002 - 22:33 #5
lidt mere tjeck på, desværre kan man ikke bruge sizeof inde i "str" funktionerne, (den siger bare 4 for pointer, mens hvor et array er erklæret siger den 128 for min streng_a)

#include "stdafx.h"
#include "iostream.h"
#include "time.h"
#include "stdlib.h"
#include "stdio.h"

// skal være nul termineret
int strlen( const char str[] )
{
    int i=0;

    while( true )
    {
        if( str[i] == '\0' )
        {
            return i; // størrelse uden nul terminering
        }

        i++;
    }
}

bool strcat( char str_a[], const char str_b[], int a_len )
{
    int a_size = strlen( str_a );
    int b_size = strlen( str_b );

    int total = a_size + b_size + 1; // +1 = en nul terminerning nødvendig

    if( total > a_len )
    {
        return false; // ikke nok plads
    }

    for( int i=0; i<b_size; i++ )
    {
        str_a[a_size+i] = str_b[i];
    }

    str_a[a_size+b_size+1] = '\0'; // terminer
   
    return true;
}

void main()
{
    char streng_a[128] = "ostebolle";
    char streng_b[128] = " er godt!";

    cout << "str a: " << streng_a << endl;
    cout << "str b: " << streng_b << endl;


    if( strcat( streng_a, streng_b, sizeof(streng_a) ) )
    {
        cout << "strcat a: " << streng_a << endl;
        cout << "strcat b: " << streng_b << endl;
    }
    else
    {
        cout << "strcat: failed" << endl;
    }
}
Avatar billede siul Nybegynder
03. marts 2002 - 22:41 #6
Hej Chries.
Pointen i opgaven er at lave det som du du har skrevet koden paa, men uden brug af strcpy() eller strlen() eller strcat(). Jeg beklager at jeg er daarlig til at forklare mig.
Avatar billede chries Nybegynder
04. marts 2002 - 08:30 #7
jeg bruger heller ikke strcpy strcat, har selv lavet dem :-)
Avatar billede siul Nybegynder
04. marts 2002 - 10:39 #8
Hej Chries,
Det virker jo!!
Jeg maa tilstaa at jeg lige er gaaet igang med at programmere i januar og har bevaeget mig laengere frem end jeg har laert med denne funktion (eller du lavede den jo). Er det muligt at jeg kan bede dig om en lille forklaring om processen i functionen, da jeg ikke helt kan genneskue det. Hvorfor ligger int strlen( const char str[] ) og bool strcat( char str_a[], const char str_b[], int a_len )foer main()? Jeg har kun set functioner der ligger efter main og at man laver et function call i main.
Haaber du har lyst til at svare - jeg indroemmer at jeg er kraevende. =0)
Avatar billede chries Nybegynder
04. marts 2002 - 10:50 #9
Main kender alt der ligger oven over den. Hvis de skulle ligge efter main, skal jeg erklærer dem:

int strlen( const char str[] );
bool strcat( char str_a[], const char str_b[], int a_len );

void main()
{
..
}

int strlen( const char str[] )
{
..
}

bool strcat( char str_a[], const char str_b[], int a_len )
{
..
}

Forklaring af funktioner:

int strlen( const char str[] )
{
    int i=0; // start ved nul

    while( true ) // i en uendelighed gør
    {
        if( str[i] == '\0' ) // test om dette element er en nul terminering
        {
            return i; // returner (gå ud af while) i = hvor nul terminering er, hvilket er set samme som størrelsen uden nul terminering
        }

        i++; // test næste element ved at flytte i (i = i + 1)
    }
}

bool strcat( char str_a[], const char str_b[], int a_len )
{
    int a_size = strlen( str_a ); // længen af streng a minus nul terminering
    int b_size = strlen( str_b ); // længen af streng b minus nul terminering

    int total = a_size + b_size + 1; // total længde af begge strenge + plads til en nul terminerning

    if( total > a_len ) // er der plads til begge stenge + nul terminerning i streng a ?
    {
        return false; // ikke nok plads
    }

    // for alle elementer i b (alle untagen termintering)
    for( int i=0; i<b_size; i++ )
    {
        str_a[a_size+i] = str_b[i]; // sæt element fra b ind i a, på a's første frie plads i dens streng
    }

    str_a[a_size+b_size+1] = '\0'; // terminer streng a lige efter streng b
   
    return true;
}
Avatar billede siul Nybegynder
04. marts 2002 - 21:03 #10
Hej Chries,
Du har vaeret en stor hjaelp, jeg har sat point satsen op til 100 da jeg blev ved med at stille dig spoergsmaal. Der er noget med at du skal trykke svar, saa jeg kan acceptere og du faar pointene ikke sandt?
Tak for hjaelpen!
Avatar billede siul Nybegynder
26. marts 2002 - 01:17 #11
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester