|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Feb 2008
Messaggi: 84
|
[C] stringa inversa
Salve dovrei scrivere un funzione che inverte una stringa, avevo pensato a qualcosa del genere:
Codice:
void reverse(char in[], char out[])
{
int i, c;
in[i] = 0;
for(i = 0; i < c; ++i){
in[i] = c;
--i; }
if( c == '\n'){
out[i] = in[i];
}
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
No. Ci sono degli errori. Il primo, il più lampante, è che la variabile c non è inizializzata.
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Aug 2008
Messaggi: 51
|
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Feb 2008
Messaggi: 84
|
no non lo testata la funzione, pensavo di incrementare la i e poi decrementarla per copiare l'inverso.....
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Aug 2008
Città: Bergamo
Messaggi: 116
|
Alla funzione devi passare anche la lunghezza della stringa...
poi io farei cosi (non lo testato): Codice:
void reverse(char stringa[], int lunghezza)
{
int i, cicli;
char carattere;
i = 0;
cicli = lunghezza / 2;
for(; cicli > 0;cicli--)
{
carattere = stringa[i];
stringa[i] = stringa[lunghezza];
stringa[lunghezza]= carattere;
i++;
lunghezza--;
}
}
__________________
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
A me sembra più semplice così:
Codice:
char aString[] = "ciao";
int length = strlen(aString);
char bString[length + 1];
int j =0;
int i;
bString[length] = '\0';
for (i = (length - 1); i >=0; i--) {
bString[j] = aString[i];
j++;
}
printf("%s\n", bString);
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Puoi fare una reverse in place (la butto giù al momento, potrebbe essere sbagliata):
Codice:
void reverse(char *str)
{
size_t len = (strlen(str) - 1);
unsigned x;
char *end;
for (end = &str[len]; len > 1; ++str, --end)
{
char tmp = *end;
*end = *str;
*str = tmp;
len -= 2;
}
}
ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Azz non avevo notato altre due soluzioni prima di me... sto invecchiando.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 564
|
La soluzione più semplice potrebbe essere una cosa così:
Codice:
#include <stdio.h>
#include <string.h>
void reverse(char *in, char *out)
{
out += strlen (in) - 1;
*out = 0;
while (*in)
*out-- = *in++;
}
int main(int argc, char *argv[])
{
char buf[5];
reverse ("ciao", buf);
puts (buf);
return 0;
}
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 564
|
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Feb 2008
Messaggi: 84
|
Grazie a tutti, esaminerò i codici da voi scritti.
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Feb 2008
Messaggi: 84
|
comunque la volevo scrivere senza usare la funzione strlen.... è possibile?
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2789
|
Sì, puoi o passare alla funzione la lunghezza della stringa come ti ha consigliato the_ivos, oppure devi andare in fondo alla stringa di input e poi tornare indietro. Ma perché non vuoi usare strlen?
|
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Feb 2008
Messaggi: 84
|
stò seguendo degli esercizi e ancora non è previsto l'uso di tali funzioni...
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
|
Quote:
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization. --Gerald Weinberg |
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 564
|
Quote:
Codice:
void reverse(char *in, char *out)
{
char *c = in;
while (*c++);
out += (c - in - 1);
*out-- = 0;
while (*in)
*out-- = *in++;
}
|
|
|
|
|
|
|
#18 |
|
Member
Iscritto dal: Feb 2008
Messaggi: 84
|
OK grazie a tutti per i consigli....
|
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Nov 2003
Messaggi: 142
|
salve io avrei fatto in questo modo, premetto che dal libro su cui sto studiando, sono alle prime armi, dispongo di una funzione che mi crea la stringa dai caratteri in entrata e mi ritorna la sua lunghezza, dati che conto di utilizzare nella mia funzione reverse. la funzione è
Codice:
char reverse (char stringa[], lunghezza)
{ int lunghezza;
char stringarev[lunghezza];
char stringa[lunghezza];
int i;
for (i=lunghezza; i<= lunghezza && stringa[i]!='\0' && stringa[i]!='\n';--i )
{
int j=0;
stringarev[j]=stringa[i];
++j;
}
if (stringa[i]=='\0')
--i;
else
if (stringa[i]=='\n')
--i;
return stringarev;
}
help! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:22.




















