Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Forum :: Programmazione.it :: Programmazione.it :: scambio array caratteri
Scritto da Riccardo Izzo a.k.a. scccc il 14-08-2007 ore 13:30
Intel Cluster Studio XE
Ciao a tutti raga...Ho dei problemi ad implementare un metodo in cui gli passi due array di caratteri e mi ritorni il valore scammbiato. Ho provato a fare così:
Codice:

char*cambia(char* a, char* b)
{
char* tmp;
strcpy(a,tmp;
strcpy(a,b);
strcpy(b,tmp);

}


Così facendo il programma si blocca a tempo di esecuzione...come potrei risolvere?
Precedente: MODALITA' GRAFICA
Successiva: Funzioni Editor per scrivere messaggi
Intervento di doddi1965 del 14-08-2007 ore 19:51, Taggia (IM)
Barone
Barone

(234 interventi)
Iscritto il 28-07-2006
Ciao Riccardo....

può essere che non ho capito bene il problema, ma prova a fare così:

#include
template void bubbleSort(container &array)
{
container::reverse_iterator i;
container::iterator j;
for(i = array.rbegin(); i != array.rend(); ++i)
for(j = array.begin(); j != i ; ++j)
if((*j) > *(j+1) /* compara gli elementi vicini */
std::swap(*j, *(j+1));
}

template void bubble_sort(T *base, size_t n) {
T *p, *q, t;
while (n--) {
for (q = (p = base) + 1; p < base + n; ++q, ++p) {
(*p > *q) && (t = *p, *p = *q, *q = t);
}
}
}

Fammi sapere.....
Intervento di Riccardo Izzo a.k.a. scccc del 14-08-2007 ore 20:30, Grazzanise (CE)
Plebeo
Plebeo
(4 interventi)
Iscritto il 05-07-2007
Citazione:
Ciao Riccardo....

può essere che non ho capito bene il problema, ma prova a fare così:

#include
template void bubbleSort(container &array)
{
container::reverse_iterator i;
container::iterator j;
for(i = array.rbegin(); i != array.rend(); ++i)
for(j = array.begin(); j != i ; ++j)
if((*j) > *(j+1) /* compara gli elementi vicini */
std::swap(*j, *(j+1));
}

template void bubble_sort(T *base, size_t n) {
T *p, *q, t;
while (n--) {
for (q = (p = base) + 1; p < base + n; ++q, ++p) {
(*p > *q) && (t = *p, *p = *q, *q = t);
}
}
}

Fammi sapere.....
eh no credo che mi sia spiegato male...io volevo creare una funzione a cui passo due array di caratteri a e b e che all'uscita i due arrau di caratteri siano invertiti, ovvero a diventa b e veciversa
Intervento di doddi1965 del 14-08-2007 ore 22:37, Taggia (IM)
Barone
Barone

(234 interventi)
Iscritto il 28-07-2006
Citazione:
eh no credo che mi sia spiegato male...io volevo creare una funzione a cui passo due array di caratteri a e b e che all'uscita i due arrau di caratteri siano invertiti, ovvero a diventa b e veciversa

Ah... sarà l'aria di ferragosto... vado per tentativi... prova:

Imports System

Public Class MainClass
Shared Sub Main()
Dim myArray As [String]( ) = {"W", "i", "A", "t"}

Console.WriteLine("Display myArray...")
DisplayArray(myArray)

Console.WriteLine("Reverse and display myArray...")
Array.Reverse(myArray)
DisplayArray(myArray)

Dim myOtherArray As [String]( ) = _
{"e", "l", "s", "T", "o", "B", "f", "v"}

Console.WriteLine("Display myOtherArray...")
DisplayArray(myOtherArray)

Console.WriteLine("Sort and display myOtherArray...")
Array.Sort(myOtherArray)
DisplayArray(myOtherArray)

End Sub
Public Shared Sub DisplayArray(ByVal theArray( ) As Object)
Dim obj As Object
For Each obj In theArray
Console.WriteLine("Value: {0}", obj)
Next obj
Console.WriteLine(ControlChars.Lf)
End Sub 'DisplayArray

End Class

oppure:





oppure:

public class {
public static void main (String[] args) {
int[] array = {1, 2, 3, 4, 5};
int[] copia = array; // copia solo il riferimento
ArrayUtils.reverse(copia); // inverto
System.out.print("Array copia: ");
ArrayUtils.print(copia); // 'copia' e' invertito
System.out.print("Array originale: ");
ArrayUtils.print(array); // anche 'array' e' invertito

int[] array1 = {6, 7, 8, 9, 10};
int[] copia1 = ArrayUtils.clone(array1); // copia
ArrayUtils.reverse(copia1); // inverto
System.out.print("Array copia1: ");
ArrayUtils.print(copia1); // 'copia1' e' invertito
System.out.print("Array originale1: ");
ArrayUtils.print(array1); // ma 'array1' no
}
}

Questi sono solo esempi di codice.... ma questo ti serve per l'università? (Scusa l'indiscrezione, ma sono un tipo curioso...)
In ogni caso, prova ad elaborare il codice che ti ho passato, si tratta di vecchi lavori... stasera non avevo tempo di mettere mano al codice, l'aria ferragostana si fa sentire....
Fammi sapere comunque...
Intervento di Riccardo Izzo a.k.a. scccc del 15-08-2007 ore 13:15, Grazzanise (CE)
Plebeo
Plebeo
(4 interventi)
Iscritto il 05-07-2007
Nono, purtroppo non era nemmeno questo quello che dicevo io...Mo ti faccio vedere ;)

#include
#include
using namespace std;

void swap(char *&tab1, char *&tab2) {
char *app = tab1;
tab1 = tab2;
tab2 = app;
}

void stamp(char *tab1, char *tab2) {
cout
Intervento di doddi1965 del 16-08-2007 ore 18:21, Taggia (IM)
Barone
Barone

(234 interventi)
Iscritto il 28-07-2006
Ti mando questo codice, che puoi tentare di elaborare con gli array anzichè con gli interi:

#include

void scambia(int *x, int *y) {

int z;

z = *x; *x = *y; *y = z;

}

void swap (int x, int y) {

int z;

z=a; a=b; b=z;

}

int main() {

int a=3, b=5;

printf("Prima dello scambio: a=%d, b=%d.n", a, b); /* a=3 e b=5 */

swap(a, b);

printf("Dopo lo scambio con swap: a=%d, b=%d.n", a, b);

/* a=3 e b=5 */

scambia(&a, &b);

printf("Dopo lo scambio con scambia: a=%d, b=%d.n", a, b);

/* a=5 e b=3 */

return 0; }

prova a sostituire come ti ho detto sopra....
o come dicevano i latini: per aspra ad astra....
Intervento di Francesco Fiaschi a.k.a. gandalfrank del 16-08-2007 ore 21:46, Pisa (PI)
Cavaliere
Cavaliere

(167 interventi)
Iscritto il 20-03-2007
Sono d'accordo con Doddi1965 (ciao Doddi!), ma la stessa cosa la puoi fare usando i riferimenti, invece dei puntatori.
Questo codice è con gli interi, facilmente modificabile con gli array:

#include (iostream.h)


// passaggio per riferimento
void scambia_r (int& a, int& b)
{
int t = a;
a = b;
b = t;
}

int main()
{
int a = 3, b = 8;
cout (( "a = " (( a (( "tb = " (( b (( "n";


scambia_r (a, b);
cout (( "a = " (( a (( "tb = " (( b (( "n";

}

P.S. Visto che l'editor per scrivere i post non visualizza le parentesi angolari ">", ho usato le parentesi tonde in sostituzione...

Ciao Francesco
Intervento di doddi1965 del 17-08-2007 ore 08:47, Taggia (IM)
Barone
Barone

(234 interventi)
Iscritto il 28-07-2006
Citazione:
Sono d'accordo con Doddi1965 (ciao Doddi!), ma la stessa cosa la puoi fare usando i riferimenti, invece dei puntatori.

Ciao Francesco!!! Bravo, non ci avevo pensato.... d'altronde non posso pretendere molto da Belisario, il mio neurone solitario....
CIAOOOOOOOOOOOOOOOOOOOOOOOOOOO
Intervento di Francesco Fiaschi a.k.a. gandalfrank del 17-08-2007 ore 09:40, Pisa (PI)
Cavaliere
Cavaliere

(167 interventi)
Iscritto il 20-03-2007
Ciao Doddi,
Citazione:
Ciao Francesco!!! Bravo, non ci avevo pensato.... d'altronde non posso pretendere molto da Belisario, il mio neurone solitario....
CIAOOOOOOOOOOOOOOOOOOOOOOOOOOO

prova a fare incontrare Belisario con la particella di sodio di una famosa acqua minerale, gira voce che si senta sola...

Grazie, ma è solo un caso, non conosco molto C++.

Francesco
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.609 secondi.