[C++] Concatenare due stringhe con i puntatori

di Anonimizzato21304 il
6 risposte
Non capisco dove sia l'errore....Mi copia solo la prima stringa e non la seconda nella stringa finale...
#include <iostream>
#include <cstring>
using namespace std;
const int np = 500;

char concatenazione (char* str1, char* str2, int dim1, int dim2) {
char* pstrf = new char [dim1 + dim2 + 1];

 for (int k = 0; k <= dim1 + dim2; k++){
  if (k <= dim1){
   pstrf[k] = *(str1 + k);
  }
  if (k > dim1){
   pstrf[k] = *(str2 + k);
  }
 }

cout << pstrf << endl;
}

int main () {
char strA[np];
char strB[np];
cout << "Inserire la prima stringa" << endl;
cin >> strA;
cout << "Inserire la seconda stringa" << endl;
cin >> strB;
char* pstrA = strA;
char* pstrB = strB;
int dimA = strlen(strA);
int dimB = strlen(strB);
char z = concatenazione (pstrA, pstrB, dimA, dimB);
}

6 Risposte

  • Ci sono molte cose strane a partire da quel char

    Ma quello che è sbagliato sicuramente è quella for e l'iso di k
  • oregon ha scritto:


    Ci sono molte cose strane a partire da quel char
    Ma quello che è sbagliato sicuramente è quella for e l'iso di k
    Si ok.. ma puoi essere un pò più preciso? Perchè così non so come aggiustarlo....
  • Quando inizi a concatenare la seconda stringa devi iniziare a farlo da zero, non da k.
    La funzione concatenazione è dichiarata ritornare un char, ma non ci si trova alcun return. Inoltre deve proprio ritornare un char? perché?

    Metti a posto queste cose per iniziare.
  • sebaldar ha scritto:


    Quando inizi a concatenare la seconda stringa devi iniziare a farlo da zero, non da k.
    La funzione concatenazione è dichiarata ritornare un char, ma non ci si trova alcun return. Inoltre deve proprio ritornare un char? perché?
    Metti a posto queste cose per iniziare.
    ok, la parte sul char l'ho capita, deriva dal fatto che ci ho fatto così tanti tentativi su quel foglio che mi sono dimenticato di modificarlo...Ma la parte sulla seconda stringa non l'ho capita, in che senso devo iniziare da zero? Non devo usare il ciclo for?E se sì in che modo?
  • Della prima stringa stai copiando anche il carattere di terminazione \0, quindi quando stampi la stringa concatenata si ferma lì.
    quindi il primo if deve essere
    
    if (k < dim1){
    
    la seconda stringa la inizi a leggere da una posizione k, ma devi invece iniziare da zero
    
    if (k >= dim1){
    pstrf[k] = *(str2 + k - dim1);
    }
    
  • sebaldar ha scritto:


    Della prima stringa stai copiando anche il carattere di terminazione \0, quindi quando stampi la stringa concatenata si ferma lì.
    quindi il primo if deve essere
    
    if (k < dim1){
    
    la seconda stringa la inizi a leggere da una posizione k, ma devi invece iniziare da zero
    
    if (k >= dim1){
    pstrf[k] = *(str2 + k - dim1);
    }
    
    GRAZIE MILLE, ora vedendo come l'hai fatto, ho capito l'errore e cosa intendevi per ripartire da zero. Ancora grazie, sei stato il mio salvatore.
Devi accedere o registrarti per scrivere nel forum
6 risposte