08. marts 2002 - 20:38Der er
6 kommentarer og 1 løsning
lave dette til void stringcat(char[], char[])
Hej med jer, Er der nogle der kan hjaelpe mig med dette? Jeg skal samle functioner: int strlen( const char str[] ); bool stringcat(char str_a[], const char str_b[], int a_len);
i EN function: void stringcat(char[],char[]); de system-definerede functioner strlen, strcmp og strcpy maa IKKE benyttes. Jeg har sat pointene til 100, da jeg skal aflevere snarest muligt - helst igaar:) Nedenfor er programmet.
Paa forhaand tak!
//function protypes int strlen( const char str[] ); bool stringcat(char str_a[], const char str_b[], int a_len);
void main() { // variables used char string_a[128] = "Cheese cake"; char string_b[128] = " is good!";
//funtion call in the if statement for function stringcat if( stringcat( string_a, string_b, sizeof(string_a) ) ) { cout << "stringcat a: " << string_a << endl;
} else { cout << "stringcat: failed" << endl; }
}
// has to be NULL terminated int strlen( const char str[] ) { int i=0;
while( true ) { //test if this element is a NULL termination if( str[i] == '\0' ) {
// size without NULL termination return i; }
i++; } }
bool stringcat( char str_a[], const char str_b[], int a_len ) { //The lenght of a minus NULL termination int a_size = strlen( str_a );
//The lenght of b minus NULL termination int b_size = strlen( str_b );
//Total lenght of both strings+ space for NULL termination int total = a_size + b_size + 1;
//is there space enough for both strings + NULL //termination in string a? if( total > a_len ) { // not enough space return false; }
for( int i=0; i<b_size; i++ ) { //put b into a at the first empty spot in a's string str_a[a_size+i] = str_b[i]; } // terminate string a right after string b str_a[a_size+b_size+1] = '\0';
Hej Soreno, Jeg er ikke meget for at afvise dit svar og jeg vil meget gerne give dig point. Jeg har et problem med: int main(int argc, char **argv),da jeg ikke har laert at bruge det (har kun programmeret siden januar). Hvorfor bruger du **argv?? - programmet koerer med *argv. Er det muligt at du kan give en lille forklaring? Tak for hjaelpen!
Hej soreno, Jeg er meget imponeret over hvor hurtigt du svarer og at det er saa brugbart som det er. Du faar meget veltjent pointene (haaber det koerer automatisk naar jeg accepter svaret) Hvis du har tid, vil jeg tillade mig at spoerge til funktionen - jeg er jo ret ny i C++ saa det virker formentlig som nogle temmelig lette spoergsmaal.
Har jeg forstaaet det ret, at dine while loops tester om elementer er en nulterminering og at for loopen propper b ind paa den foerste ledige plads paa a strengen? Hvordan lukker den efter det hele er samlet paa a strengen, jeg troede at den skulle lukke med en NULL streng?
while løkkerne tæller antallet af tegn (a_size) før arrayet når et \0 tegn. i eksemplet er "Cheese cake" 11 tegn langt + 1 tegn til \0
for løkken sætter indholdet af str_b[i] på str_a[a_size+i], dvs. at \0 i str_a bliver overskrevet med første tegn i " is good!"
jeg prøvede at sætte følgende ind som det sidste i stringcat(..): a_size = 0; while( str_a[a_size] != '\0' ) { cout << str_a[a_size]; a_size++; } cout << endl;
og det fungerede uden problemet. men hvordan str_a er blevet \0 termineret, det aner jeg faktisk ikke ? (måske er der en anden der kan uddybe ?)
i det eksempel du postede blev str_a jo netop \0 termineret: str_a[a_size+b_size+1] = '\0'; men jeg prøvede begge dele, og det var ens, og så tænkte jeg at det var unødvendig fyld, og fjernede det.. det er måske ikke i overensstemmelse med god programmeringsskik, så sprøgsmålet er om du ikke skulle tage at sætte det ind igen.. ? (det kunne jo være at personen der skal rette din opgave ikke er tilfreds hvis ikke du manuelt \0 terminere arrayet)
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.