Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-09-2005, 17:55   #1
Manugal
Senior Member
 
L'Avatar di Manugal
 
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;
}
Praticamente lo faccio partire e si blocca devo per forza premere Ctrl-C. Che cosa c'è che non va? Grazie
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 18:11   #2
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Quote:
Originariamente inviato da Manugal
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;
}
Praticamente lo faccio partire e si blocca devo per forza premere Ctrl-C. Che cosa c'è che non va? Grazie
La condizione (i!=j) non funziona sempre; ad esempio, se non ci sono spazi e i=5, i e j assumono le seguenti coppie di valori:
- 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
anche se alla prima iterazione ci pensa l'if a ristabilire il giusto valore iniziale.

Ho dato un'occhiata fugace, magari mi e' sfuggito qualcosa
__________________
gica78r@ncc-1701:~$ tar -c
tar: Codardamente mi rifiuto di creare un archivio vuoto
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 19:19   #3
Manugal
Senior Member
 
L'Avatar di Manugal
 
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).
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 20:31   #4
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Quote:
Originariamente inviato da Manugal
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).
Se posso darti un consiglio, scriviti una funzioncina che ti elimina gli spazi dalla stringa, e poi procedi col test se e' palindroma o meno (sempre che non ti sia chiesto di preservare la stringa originale, eh). Io l'ho risolto cosi'.
__________________
gica78r@ncc-1701:~$ tar -c
tar: Codardamente mi rifiuto di creare un archivio vuoto
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 20:33   #5
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Codice PHP:
int pal(char p[]){
    
int len strlen(p);
    
int i 0len 1;
    while(
j){
        if(
p[i] == ' '){
            
i++;
            continue;
        }
        if(
p[j] == ' '){
            
j--;
            continue;
        }
        if(
p[i] != p[j])
            return 
0;
        else{
            
i++;
            
j--;
        }
    }
    return 
1;

__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 20:46   #6
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
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';
}
Pero' come ha fatto anx721 non altera la stringa (anche se tutti quegli if - else farebbero arrabbiare fek )


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 20:51.
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 20:51   #7
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Quote:
Originariamente inviato da Gica78R
[code]
Pero' come ha fatto anx721 non altera la stringa (anche se tutti quegli if - else farebbero arrabbiare fek )
ma la tua crea segmentation fault se si passa un letterale stringa
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 20:57   #8
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Quote:
Originariamente inviato da anx721
ma la tua crea segmentation fault se si passa un letterale stringa
Cioe' se faccio
Codice:
ret = is_palindroma("Questa non e' palindroma");
Mi sa che hai ragione...
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
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 20:57   #9
Manugal
Senior Member
 
L'Avatar di Manugal
 
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?
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 21:07   #10
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Quote:
Originariamente inviato da Manugal
Che dite che compilatore posso usare?
gcc (sotto Linux )
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
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 21:11   #11
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Quote:
Originariamente inviato da Manugal
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?
io uso mingw developer studio come ide che pero ha lo stesso compilatore di devcpp (che non è un compilatore in sè); se c'è un segmentation fault c'è la fnestra d'errore di windows, ma questa dovrebbe esserci indipendentemente dal compilatore che usi, piu che altro dipende dal sistema su cui ti trovi
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 21:47   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Gica78R
gcc (sotto Linux )
Senno' ce ne sono della Borland liberamente scaricabili, pero' poi non saprei dirti come integrarlo nel tuo IDE (se usi un IDE).
Sta usando gcc sotto Windows e gli vuoi fare cambiare ?

In Dev-C++ metti un input (scanf o qualsiasi cosa del genere) prima dell'uscita del programma almeno ti si vede la console...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 22:08   #13
cionci
Senior Member
 
L'Avatar di cionci
 
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;
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 22:16   #14
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Quote:
Originariamente inviato da cionci
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;
}
Magari con
Codice:
while (i < j)
e
Codice:
while (isspace(str[j])) --j;
funziona meglio
__________________
gica78r@ncc-1701:~$ tar -c
tar: Codardamente mi rifiuto di creare un archivio vuoto
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 22:35   #15
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
In effetti
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 22:38   #16
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Quote:
Originariamente inviato da cionci
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;
}
oltre alle correzioni già segnalate bisogna anche aggiustare le condizioni dei due while interni: anche esse devono controllare che (i < j) se no gli indici possono essere decrementati o incrementati oltre i valori limiti
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 22:44   #17
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da anx721
oltre alle correzioni già segnalate bisogna anche aggiustare le condizioni dei due while interni: anche esse devono controllare che (i < j) se no gli indici possono essere decrementati o incrementati oltre i valori limiti
Invece no... E' questa la furbata Perchè il primo carattere diverso da spazio per entrambe le direzioni è già stato verificato essere lo stesso
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 22:58   #18
supersayan
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.
supersayan è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 22:59   #19
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Quote:
Originariamente inviato da cionci
Invece no... E' questa la furbata Perchè il primo carattere diverso da spazio per entrambe le direzioni è già stato verificato essere lo stesso
Una stringa di soli spazi e' palindroma? Secondo me si. In tal caso, credo che la tua funzione restituisca 0, vero?
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
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2005, 23:19   #20
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Sì...in tal caso non funziona...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
La Camera USA presenta il conto: i data ...
Non solo EV, ma anche IA: Panasonic inau...
iPhone Duo, il debutto del pieghevole di...
Atlas 960E SuperPoD, la risposta di Huaw...
IA militare e nucleare: esperti USA e ci...
Dieci mini-reattori nucleari in Europa d...
CONTROL Resonant su PC: Path Tracing, Ra...
ColorOS 17 arriva su circa 90 dispositiv...
GTA VI, il multiplayer potrebbe debuttar...
Aggiornamento KB5002914 rompe Excel: ecc...
Processo Huawei a Brooklyn: l'FBI mostra...
WhatsApp introduce nuovi temi per le cha...
NVIDIA, Google e Emerald AI uniscono le ...
iPhone 18 Pro Max, il test sulla vapor c...
Fine estate in giardino: le proposte sco...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:39.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v