Salve,ho sviluppato questo codice per rendere giustificato il testo scritto in una riga di 65 caratteri, MA a volte funziona e a volte no, sballando la riga di 1 o 2 caratteri in + o in -.
Quando modifico i valori "i += 65" in "i += 66" succede che la stringa che andava male dopo va bene e viceversa, comunque quelle che va meglio con un pò tutte le stringhe è 65.
Che cosa può essere???????
ecco a voi il codice
#include <stdio.h>
#include <string.h>
void stringtok(char *, char *);
int main() {
char *string, empty[1000] = "\0";
gets(string);
stringtok(string,empty);
printf("\n%s\n", empty);
return 0;
} //fine main
void stringtok(char *string, char *empty) {
void insertspace(char *, char *, int);
int i = 64, x;
size_t len;
len = strlen(string);
while (i <= len) {
x = 1;
if(string[i + 1] == ' ' && string[i] != ' ') {
string[++i] = '\n';
insertspace(string,empty, 0);
}
else if(string[i] == ' ') {
string[i] = '\n';
insertspace(string,empty ,1);
}
else if(string[i] != ' ') {
while (--i) {
++x;
if (string[i] == ' ') {
string[i] = '\n';
insertspace(string,empty, x);
break;
}
}
}
i += 65;
}
insertspace(string,empty, 0);
} // fine stringtok
void insertspace(char *Ptr, char *Ptr2, int X) { //X = spazi da inserire
int i, space = 0;
static int x = 0, y = 0;
if(X)
for (i = x; Ptr[i] != '\n'; i += 1) //conta spazi disponibili
if(Ptr[i] == ' ')
++space;
strcat(Ptr2, " ");
y += 10;
for (; Ptr[x] != '\n'; y++, x++) {
Ptr2[y] = Ptr[x];
if (X && Ptr[x] == ' ') {
if(space < X) {
Ptr2[++y] = '*';
Ptr2[++y] = '*';
X--;
}
else {
Ptr2[++y] = '*';
--X;
}
}
}
Ptr2[y] = Ptr[x];
Ptr[x] = ' ';
++x;
++y;
} //fine insertspace
/*If you happened to receive some new computer hardware this Christmas or are weighing a possible upgrade with Skylake PCs becoming more common and AMD Zen coming out next year, you might as well benchmark your system against our vast collection of other systems to see how the performance stacks up.*/
/*Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura, ché la diritta via era smarrita. Ahi quanto a dir qual era è cosa dura esta selva selvaggia e aspra e forte che nel pensier rinova la paura!*/
in fondo al codice ci sono 2 esempi nei commenti, dove uno funziona correttamente e l'altro no.