como puedo hacr que en mi funcion recursiva pase a mi variable str3 todo el valor de la funcion recursiva
#include <iostream>
using namespace std;
char str1[20],str2[20],str3[20];
void myStrcat(char [],char []);
void myStrcat(char str1[],char str2[]){
int c,d;
c = 0;
while(str1[c] != '\0') {
c++;
}
d = 0;
while(str2[d] != '\0'){
str1[c] = str2[d];
d++;
c++;
}
str1[c] = '\0';
}
int main(){
cout << "Enter first string: " << endl;
cin >> str1;
cout << "Enter secound string: " << endl;
cin >> str2;
myStrcat(str1,str2);
cout << "Result is " << str1 << endl;
}
No veo ninguna funcion recursiva :xD
aqui esta me da error de Segmentation fault
#include <iostream>
using namespace std;
void myStrcat(char [],char [],char []);
char str1[20],str2[20],str3[20];
void myStrcat(char str1[],char str2[], char str3[]){
int c,d;
c = 0;
if((str1 != '\0') && (str2 != '\0')){
str3 = str1;
myStrcat(str1+1, str2, str3+1);
}else if((str1 == '\0') && (str2 != '\0')){
str3 = str2;
myStrcat(str1+1, str2, str3+1);
}
str3[c] = '\0';
}
int main(){
cout << "Enter first string: " << endl;
cin >> str1;
cout << "Enter secound string: " << endl;
cin >> str2;
myStrcat(str1,str2,str3);
cout << "Result is " << str3 << endl;
}
Tu funcion tiene buffer overflow si lo que quieres es concatenar cadenas la funcion recursiva no te sirve..
Te recomiendo usar memset strlen y si acaso snprintf
tienes un par de problemas confusos
myStrcat(str1,str2,str3);
debería ser
yStrcat(&str1,&str2,&str3);
por ser array
(str1 != '\0') && (str2 != '\0')
está mal porque los 3 str son array, y no pueden ser '\0' eso inplicaría que son un punto de esa cadena
myStrcat(str1+1, str2, str3+1);
estás sumandole un entero a un array char...
en alguno de estos puntos es el segmentation (o en todos)
entonces los tendria que cambar POR null
?
como podria modificar mi funcion para que pueda concatenar
char *myStrcat(char *str1,char *str2){
int len = strlen(str1)+strlen(str2);
char *nuevo = calloc(len +1,sizeof(char));
snprintf(nuevo,len,"%s%s",str1,str2);
return nuevo;
}
pero no puedo usar funciones ni punteros por eso lo puse global los arreglos :/
Citarpero no puedo usar funciones ni punteros por eso lo puse global los arreglos :/
ya fallaste
void myStrcat(char str1[],char str2[], char str3[])
eso es una función con punteros como argumentos XD si vas a pasar array inevitablemente se hace uso de punteros, en su defecto declara los array globales y mystrcat no lleva argumentos, (a demás por ser globales pueden producir comportamiento no esperado) simplemente la llamas y sabe que str3 va todo lo de 1 y 2
Creo que se refiere a funciones de librerias...
void myStrcat(char *str1,char *str2){
snprintf(str3,20,"%s%s",str1,str2);
}
el anterior es solo usando snprintf.
void myStrcat(){
int i =0, j=0;
while(str1[i] != '\0'){
str3[i] = str1[i];
i++;
}
while(str2[j] != '\0'){
str3[i +j] = str1[j];
j++;
}
}
str3 debe de tener al menos el doble de tamaño o la suma de str1 y str2
sele puede agregar otra condicion de paro a cada while mientras i < 20 al primero y respecto a j en el 2do
como podria hacerlo con puros argumentos?
me refiero que debo hacer una funcion recursiva sin usar funciones de libreria hacer la misma funcion que hace strcat pero recursiva
Si ya tienes las variables globales no tienes que usar argumentos.
Si quieres usar argumentos.
char *myStrcat(char *s1,char *s2, char *s3){
int i =0, j=0;
while(s1[i] != '\0'){
s3[i] = s1[i];
i++;
}
while(s2[j] != '\0'){
s3[i +j] = s2[j];
j++;
}
}
Es lo mismo que
char *myStrcat(char s1[],char s2[], char s3[]){
int i =0, j=0;
while(s1[i] != '\0'){
s3[i] = s1[i];
i++;
}
while(s2[j] != '\0'){
s3[i +j] = s2[j];
j++;
}
}
Recursiva.... La verdad no se que maestro te pide a hacer eso.
Voy a pensar en una forma eficiente de hacer algo recursivo para hacer strcat. Luego te contesto como podria ser recursiva
es que si esta bien asi solo que los while deben ser sustitudios por el if else D: no se porque volver a inventar la funcion ya hecha
char *myStrcat(char s1[],char s2[], char s3[]){
int i =0, j=0;
while(s1[i] != '\0'){
s3[i] = s1[i];
i++;
}
while(s2[j] != '\0'){
s3[i +j] = s2[j];
j++;
}
}
No dijiste sin punteros? Ahi estas usando 4 solo en la declaración xD
en mi codigo uso punteros solo llamo la variable