|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[C] Ora ho problemi con questo... grrr.... non si finisce mai
Devo creare una funzione che mi verifichi se una stringa è palindroma o no ignorando gli spazi. Ad esempio se ho scritto:
"otto" oppure "ott o" queste sono entrambe palindrome. Io ho scritto una cosa del genere: Codice:
#include <stdio.h>
#include <string.h>
int palindroma(char a[]);
int main(void){
int ris;
char a[]="o tt o";
ris=palindroma(a);
printf("%d", ris);
return 0;
}
int palindroma(char a[]){
int i=strlen(a),j=0;
while(j!=i){
if(isalpha(i) && isalpha(j)){
if(a[i]!=a[j])
return 0;
else{
--i;
++j;
}
}
else if(isalpha(i)){
++j;
}
else if(isalpha(j)){
--i;
}
}
return 1;
}
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
- 5,0 - 4,1 - 3,2 - 2,3 - 1,4 ecc. ecc. ed il ciclo non termina mai; inoltre, i dovrebbe partire da Codice:
strlen(a)-1 Ho dato un'occhiata fugace, magari mi e' sfuggito qualcosa
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Grazie. Allora potrei modificare il while mettendo while(j<=i)? Però sono sicuro che il problema non stia tanto lì quanto al conteggio degli spazi (io gli spazi li devo ignorare).
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Codice PHP:
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Codice:
int is_palindroma(char *frase)
{
remove_blanks(frase);
int len = strlen(frase) - 1;
int i = 0;
while (i < len)
if (frase[i++] != frase[len--])
return 0;
return 1;
}
void remove_blanks(char *f)
{
int i = 0;
int j = 0;
while (f[i] != '\0')
isalpha(f[i]) ? f[j++] = f[i++] : i++;
f[j] = '\0';
}
Ciao EDIT: ora che ci penso, pero', la mia soluzione funziona solo in caso di stringhe composte di soli caratteri alfabetici... Cmq e' quello che serve quando si ha a che fare con stringhe rappresentanti frasi in un linguaggio umano (cioe' e' giusto ignorare i segni di interpunzione, accenti, apostrofi, ecc.) imho
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto Ultima modifica di Gica78R : 22-09-2005 alle 21:51. |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Quote:
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
Codice:
ret = is_palindroma("Questa non e' palindroma");
Nalla mia soluzione completa, in realta', la stringa era passata come parametro al main, quindi non ci ho badato Grazie...
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Grazie. Infatti non deve alterare la stringa deve solo vedere se è palindroma o no anche se ci sono spazi (che vanno ignorati). Il problema del mio maledetto compilatore (Dev-C++) è che quando qualcosa non va non mi dice mai se va in Segmentation Fault o qualche altra cosa. Semplicemente si limita a non scrivere niente e a ritornarmi al prompt dei comandi. Che dite che compilatore posso usare?
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
Senno' ce ne sono della Borland liberamente scaricabili, pero' poi non saprei dirti come integrarlo nel tuo IDE (se usi un IDE). Ciao
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Quote:
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
In Dev-C++ metti un input (scanf o qualsiasi cosa del genere) prima dell'uscita del programma almeno ti si vede la console... |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Io la farei così...
Codice:
#include <ctype.h>
.....
.....
.....
int palindroma(const char *str)
{
int i = 0;
int j = strlen(str)-1;
while(i > j)
{
while(isspace(str[i])) ++i;
while(isspace(str[j])) ++j;
if(str[i] != str[j])
return 0;
}
return 1;
}
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
Codice:
while (i < j) Codice:
while (isspace(str[j])) --j;
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In effetti
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Quote:
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Sep 2000
Messaggi: 139
|
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void togli_gli_spazi (char *s, char *s1) {
int i=0, j=0;
s[strlen(s)-1]= '\0';
while (s[i]) {
if (s[i] != ' ') {
s1[j]= s[i];
j++;
}
i++;
}
}
int main (int argc, char **argv) {
char *s, *s1;
int i=0, j=0;
s= (char *) calloc (32, sizeof(char));
s1= (char *) calloc (32, sizeof(char));
printf("Inserisci la stringa: ");
fgets(s, 31, stdin);
if (s[0]=='\n') {
printf("hai inserito una stringa vuota!\n");
exit(EXIT_FAILURE);
}
togli_gli_spazi(s, s1);
j= strlen(s1) -1;
while (i<j) {
if (s1[i]==s1[j]) {
i++;
j--;
}
else break;
}
if (i>=j) printf("!!!la stringa e' palindroma!!!\n");
else printf("!!!la stringa non e' palindroma!!!\n");
exit(EXIT_SUCCESS);
}
__________________
Sopra la panca la capra campa, sotto la panca la capra crepa. |
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
Dopo i due while (isspace()), str[i] sarebbe l'ultimo carattere della stringa, cioe' '\0', mentre str[j] e' indefinito e probabilmente diverso da '\0'. Sbaglio?
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto |
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì...in tal caso non funziona...
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:37.



















