Habillage du texte en C sur une mini-imprimante Thermo

J’aimerais vraiment avoir de l’aide avec l’un de mes projets. Je suis un étudiant en graphisme et n’ai que peu, voire aucune expérience en programmation. J’ai créé un programme pour une imprimante thermo mini qui identifie les tweets créés sur Twitter en fonction des hashtags spécifiques utilisés et les imprime automatiquement.

Cependant, il est basé sur une longueur de ligne de 32 caractères et divisera les mots en deux au lieu de déplacer le mot entier vers une autre ligne. Un de mes amis m’a suggéré d’habiller le mot mais je ne trouve rien en ligne qui puisse m’aider et la plupart du code que j’ai trouvé tend à être pour c ++ ou c #.

Le code jusqu’ici peut être trouvé ci-dessous:

// Build an ArrayList to hold all of the words that // we get from the imported tweets ArrayList words = new ArrayList(); Twitter twitter; import processing.serial.*; Serial myPort; // Create object from Serial class int val; // Data received from the serial port void setup() { Ssortingng portName = Serial.list()[0]; myPort = new Serial(this, portName, 9600); //Set the size of the stage, and the background to black. size(550,550); background(0); smooth(); //Make the twitter object and prepare the query twitter = new TwitterFactory(cb.build()).getInstance(); } void draw() { Query query = new Query("#RIP"); query.setRpp(1); //Try making the query request. try { QueryResult result = twitter.search(query); ArrayList tweets = (ArrayList) result.getTweets(); for (int i = 0; i < tweets.size(); i++) { Tweet t = (Tweet) tweets.get(i); String user = t.getFromUser(); String msg = t.getText(); Date d = t.getCreatedAt(); println("Tweet by " + user + " at " + d + ": " + msg); msg = msg.replace("\n"," "); myPort.write(msg+"\n"); }; } catch (TwitterException te) { println("Couldn't connect: " + te); }; println("------------------------------------------------------"); delay(20000); } 

Puisque vous avez la longueur de la ligne, ce n’est pas si difficile …

Itérez sur la chaîne, un caractère à la fois. Si vous voyez un espace, enregistrez la position, par exemple last_space . Si votre itération dépasse la longueur de ligne maximale, passez à la position last_space et convertissez l’espace en une nouvelle ligne, remettez le compteur de position à zéro et recommencez à partir de cette position.


Peut-être mettre en œuvre quelque chose comme ceci:

 #include  #include  #include  #define LINE_LENGTH 32 char text[256] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ac risus elit, id pellentesque magna. Curabitur tempor rutrum enim, sit amet interdum turpis venenatis vel. Praesent eu urna eros. Mauris sagittis tempor felis, ac feugiat est elementum sed. Praesent et augue in nibh pharetra egestas quis et lectus. Lorem ipsum."; static void wrap(char *text, const int length) { int last_space = 0; int counter = 0; for (int current = 0; text[current] != '\0'; current++, counter++) { if (isspace(text[current])) // TODO: Add other delimiters here last_space = current; if (counter >= length) { text[last_space] = '\n'; counter = 0; } } } int main(void) { printf("Before wrap:\n%s\n", text); wrap(text, LINE_LENGTH); printf("\nAfter wrap:\n%s\n", text); return 0; } 

Remarque importante: la fonction wrap modifie le tampon transmis en tant qu’argument de text . Cela signifie qu’il ne peut pas gérer les chaînes littérales car celles-ci sont en lecture seule. Cela fonctionne en remplaçant un espace par une nouvelle ligne. Si vous modifiez la fonction pour append plus d’un caractère, une meilleure solution consisterait à (ré) allouer un nouveau tampon suffisamment grand pour contenir la chaîne modifiée.