08/12/2018, 11:31
#include<stdio.h>
#define DIM 100
main(){
int i,j,count,aux;
char str[DIM];
char *s;
s=str;
printf("Inserisci una stringa: ");
gets(str);
//conta start
while(*s++!='\0')
i++;
printf("\nLa stringa è lunga %d",i);
//conta end
//scambia
for(j=0;j<i/2;j++)
{aux=*(s+j);
*(s+j)=*(s-j+i);
*(s-j+i)=aux;
}
printf("\nStringa reverse %s",str);
}
08/12/2018, 12:45
char *reverseString(char *vecchiaString, char *nuovaString){
int len = strlen(src);
for (int i = 0; i<len; i++)
nuovaString[i] = vecchiaString[len - i - 1];
nuovaString[len]='\0';
return nuovaString;
}
08/12/2018, 13:04
08/12/2018, 16:21
Anacleto13 ha scritto:Mamma che casino, non so se ti è stato dato come esercizio di contare tutti i caratteri ma esiste il metodo strlen che è più comodo e meno orrendo da vedere, poi usa le funzioni se le hai già fatte, un metodo classico per "ribaltare" le stringhe in genere è così:
- Codice:
char *reverseString(char *vecchiaString, char *nuovaString){
int len = strlen(src);
for (int i = 0; i<len; i++)
nuovaString[i] = vecchiaString[len - i - 1];
nuovaString[len]='\0';
return nuovaString;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static void swap_ch(char *a, char *b)
{
char tmp = *a;
*a = *b;
*b = tmp;
}
static char *reverse_string(char *s, size_t len)
{
size_t i;
for(i = 0; i < (len >> 1) - 1; ++i) {
swap_ch(&s[i], &s[len - i - 1]);
}
return s;
}
static char *reverse_string_ptr(char *s, size_t len)
{
char *src = s;
char *end = src + len - 1;
while (end > src) {
swap_ch(end--, src++);
}
return s;
}
int main(void)
{
char s[] = "questa e' una stringa";
size_t len = strlen(s);
puts(s);
puts(reverse_string_ptr(s, len));
puts(reverse_string(s, len));
return EXIT_SUCCESS;
}
08/12/2018, 17:31
08/12/2018, 18:25
Super Squirrel ha scritto:Allora...
- la variabile count è inutilizzata;
- non è un errore, ma non sarebbe meglio dichiarare la variabile aux come char?
- quanto vale inizialmente la variabile i?
- a cosa punta s all'uscita del while?
- per come hai impostato il codice la variabile i all'uscita del while dovrebbe essere pari al numero di elementi della stringa escluso il carattere terminatore di stringa \0. Consideriamo la stringa c a n e \0, essendo i=4, per j=0 sarà
*(str+i-j) = *(str+4) = str[4] = \0 ... per questo non ti stampa nulla!
08/12/2018, 21:25
19stellare92 ha scritto:Innanzitutto ti ringrazio per la risposta Obidream, ho studiato il tuo codice ed ho scoperto alcune cose interessanti,ad esempio che posso usare nella dichiarazione di funzione le stesse variabili usate per i parametri attuali. Questo comporta qualcosa all'interno della memoria?Non mi è chiaro se vengono generate nuove copie o se vengono usate le stesse dei parametri formali.
Per quanto riguarda il gets() ho trovato questa possibilità leggendo nei forum, tu come faresti a creare una stringa composta da piu parole,usi un ciclo?
Quando ti riferisci al fatto che è incasinato il codice intendi che dovrei seguire di piu il tuo stile e quindi per ogni "attività" che voglio realizzare generare una funzione a parte?
Scusa per tutte le domande ma ci tengo davvero a migliorare e mi piacerebbe correggere i miei errori.
static void reverse_string(char *s, size_t len)
{
size_t i = 0;
for(i = 0; i < (len >> 1) - 1; ++i) {
swap_ch(&s[i], &s[len - i - 1]);
}
}
Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000—
Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.
Powered by phpBB © phpBB Group - Privacy policy - Cookie privacy
phpBB Mobile / SEO by Artodia.