Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef __PROGTEST__
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <ctype.h>
- #include <assert.h>
- #endif /* __PROGTEST__ */
- int getNextWordLength(const char * src){
- int i;
- for (i = 0; (src[i] != ' ') && (src[i] != '\n') && (src[i] != '\0'); i++){}
- return i;
- }
- char * wordWrap ( int width, const char * src )
- {
- char *temp = (char *) calloc(strlen(src), sizeof(char));
- for (unsigned int i = 0; i < strlen(src); i++){
- if (src[i] == '\t')
- temp[i] = ' ';
- else
- temp[i] = src[i];
- }
- char *str = (char *) calloc(strlen(src), sizeof(char));
- // x is the index where we put the next letter
- int x = 0;
- int widthRemaining = width;
- int realNewLine = 0;
- for (int i = 0; temp[i] != '\0'; i++){
- char currentLetter = temp[i];
- char lastLetter = temp[i-1];
- char nextLetter = temp[i+1];
- if (currentLetter== '\t')
- currentLetter = ' ';
- if (currentLetter == '\n'){
- if ((widthRemaining != width)){
- if (!(((currentLetter == '\n') && (lastLetter == '\n')) || ((currentLetter == '\n') && (nextLetter == '\n')))){
- str[x] = ' ';
- x++;
- widthRemaining--;
- }
- if (lastLetter == '\n' && nextLetter != '\n') {
- str[x] = '\n';
- x++;
- str[x] = '\n';
- x++;
- widthRemaining = width;
- }
- continue;
- }
- else if ((lastLetter == '\n') || (nextLetter != '\n')){
- continue;
- }
- else{
- str[x] = '\n';
- x++;
- str[x] = '\n';
- x++;
- continue;
- }
- }
- if (currentLetter == ' '){
- if ((lastLetter == ' ') || (nextLetter == '\n') || (lastLetter == '\n')){
- continue;
- }
- str[x] = currentLetter;
- x++;
- widthRemaining--;
- }
- //Start of new word
- else if (currentLetter != ' '){
- //Get length of next word
- int nextWordLength = getNextWordLength(temp+i);
- //If a word is too big for any line return null
- if (nextWordLength > width)
- return NULL;
- // If the word fits on the line, add it and move i
- if (nextWordLength <= widthRemaining){
- for (int z = 0; z < nextWordLength; z++){
- //str = (char *) realloc(str, (x+1));
- str[x+z] = temp[i+z];
- widthRemaining--;
- }
- i += nextWordLength-1;
- x += nextWordLength;
- realNewLine = 0;
- }
- // If it doesn't fit, add a newline character
- else{
- if ((lastLetter == ' ') || (!realNewLine))
- x--;
- str[x] = '\n';
- realNewLine = 1;
- x++;
- i--;
- widthRemaining = width;
- }
- }
- }
- int y = x;
- for (int p = 1; str[y-p] == '\n' || str[y-p] == ' '; p++)
- x--;
- str[x] = '\n';
- str[x+1] = '\0';
- //str = (char*)realloc(str, 682* 4);
- return str;
- }
- #ifndef __PROGTEST__
- int main ( void )
- {
- char * res;
- const char * s0 =
- "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer metus\n"
- "pede, pretium vitae, rhoncus et, auctor sit amet, ligula. Integer volutpat\n"
- "orci et elit. Nunc tempus, urna at sollicitudin rutrum, arcu libero rhoncus\n"
- "lectus, vitae feugiat purus orci ultricies turpis. Pellentesque habitant\n"
- "morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam\n"
- "in pede. Etiam eu sem id urna ultricies congue. Vestibulum porttitor\n"
- "ultrices neque. Mauris semper, mauris ut feugiat ultricies, augue purus\n"
- "tincidunt elit, eu interdum ante nisl ac ante. Pellentesque dui. Vestibulum\n"
- "pretium, augue non cursus pretium, nibh dolor laoreet leo, sed pharetra pede\n"
- "libero non diam.";
- const char * s1 =
- "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer metus\n"
- "pede, pretium vitae, rhoncus et, auctor sit amet, ligula. Integer volutpat\n"
- "orci et elit. Nunc tempus, urna at sollicitudin rutrum, arcu libero rhoncus\n"
- "lectus, vitae feugiat purus orci ultricies turpis. Pellentesque habitant\n"
- "morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam\n"
- "in pede. Etiam eu sem id urna ultricies congue. Vestibulum porttitor\n"
- "ultrices neque. Mauris semper, mauris ut feugiat ultricies, augue purus\n"
- "tincidunt elit, eu interdum ante nisl ac ante. Pellentesque dui. Vestibulum\n"
- "pretium, augue non cursus pretium, nibh\tdolor laoreet leo, sed pharetra pede\n"
- "libero non diam.\n"
- "\n"
- "Proin est nisi, gravida ac, vulputate id, fringilla sit\n"
- "amet, magna. Nam congue cursus magna. In malesuada, velit a gravida sodales,\n"
- "dolor nisl vestibulum orci, sit amet sagittis mauris tellus nec purus. Nulla\n"
- "eget risus. Quisque nec sapien blandit odio convallis ullamcorper. Lorem\n"
- "ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque cursus.\n"
- "Aliquam tempus neque vitae libero molestie ut auctor.\n"
- "\n"
- "\n"
- "\n"
- "In nec massa eu tortor vulputate suscipit.\tNam tristique magna nec pede. Sed\n"
- "a nisi. Nulla sed augue ut risus placerat porttitor. Ut aliquam. Nulla\n"
- "facilisi. Nulla vehicula nibh ac sapien. Nunc facilisis dapibus ipsum. Donec\n"
- "sed mauris. Nulla quam nisi, laoreet non, dignissim posuere, lacinia nec,\n"
- "turpis. Mauris malesuada nisi sed enim. In hac habitasse platea dictumst.\n"
- "Fusce faucibus, turpis nec auctor posuere, nulla tellus scelerisque metus,\n"
- "quis molestie mi dui id quam. Mauris vestibulum. Nam ullamcorper.\n"
- "\n";
- res = wordWrap ( 40, s0 );
- assert ( ! strcmp ( res,
- "Lorem ipsum dolor sit amet, consectetuer\n"
- "adipiscing elit. Integer metus pede,\n"
- "pretium vitae, rhoncus et, auctor sit\n"
- "amet, ligula. Integer volutpat orci et\n"
- "elit. Nunc tempus, urna at sollicitudin\n"
- "rutrum, arcu libero rhoncus lectus,\n"
- "vitae feugiat purus orci ultricies\n"
- "turpis. Pellentesque habitant morbi\n"
- "tristique senectus et netus et malesuada\n"
- "fames ac turpis egestas. Nam in pede.\n"
- "Etiam eu sem id urna ultricies congue.\n"
- "Vestibulum porttitor ultrices neque.\n"
- "Mauris semper, mauris ut feugiat\n"
- "ultricies, augue purus tincidunt elit,\n"
- "eu interdum ante nisl ac ante.\n"
- "Pellentesque dui. Vestibulum pretium,\n"
- "augue non cursus pretium, nibh dolor\n"
- "laoreet leo, sed pharetra pede libero\n"
- "non diam.\n" ) );
- free ( res );
- res = wordWrap ( 120, s0 );
- assert ( ! strcmp ( res,
- "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer metus pede, pretium vitae, rhoncus et, auctor sit\n"
- "amet, ligula. Integer volutpat orci et elit. Nunc tempus, urna at sollicitudin rutrum, arcu libero rhoncus lectus, vitae\n"
- "feugiat purus orci ultricies turpis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac\n"
- "turpis egestas. Nam in pede. Etiam eu sem id urna ultricies congue. Vestibulum porttitor ultrices neque. Mauris semper,\n"
- "mauris ut feugiat ultricies, augue purus tincidunt elit, eu interdum ante nisl ac ante. Pellentesque dui. Vestibulum\n"
- "pretium, augue non cursus pretium, nibh dolor laoreet leo, sed pharetra pede libero non diam.\n" ) );
- free ( res );
- res = wordWrap ( 10, s1 );
- assert ( res == NULL );
- res = wordWrap ( 40, s1 );
- assert ( ! strcmp ( res,
- "Lorem ipsum dolor sit amet, consectetuer\n"
- "adipiscing elit. Integer metus pede,\n"
- "pretium vitae, rhoncus et, auctor sit\n"
- "amet, ligula. Integer volutpat orci et\n"
- "elit. Nunc tempus, urna at sollicitudin\n"
- "rutrum, arcu libero rhoncus lectus,\n"
- "vitae feugiat purus orci ultricies\n"
- "turpis. Pellentesque habitant morbi\n"
- "tristique senectus et netus et malesuada\n"
- "fames ac turpis egestas. Nam in pede.\n"
- "Etiam eu sem id urna ultricies congue.\n"
- "Vestibulum porttitor ultrices neque.\n"
- "Mauris semper, mauris ut feugiat\n"
- "ultricies, augue purus tincidunt elit,\n"
- "eu interdum ante nisl ac ante.\n"
- "Pellentesque dui. Vestibulum pretium,\n"
- "augue non cursus pretium, nibh dolor\n"
- "laoreet leo, sed pharetra pede libero\n"
- "non diam.\n"
- "\n"
- "Proin est nisi, gravida ac, vulputate\n"
- "id, fringilla sit amet, magna. Nam\n"
- "congue cursus magna. In malesuada, velit\n"
- "a gravida sodales, dolor nisl vestibulum\n"
- "orci, sit amet sagittis mauris tellus\n"
- "nec purus. Nulla eget risus. Quisque nec\n"
- "sapien blandit odio convallis\n"
- "ullamcorper. Lorem ipsum dolor sit amet,\n"
- "consectetuer adipiscing elit.\n"
- "Pellentesque cursus. Aliquam tempus\n"
- "neque vitae libero molestie ut auctor.\n"
- "\n"
- "In nec massa eu tortor vulputate\n"
- "suscipit. Nam tristique magna nec pede.\n"
- "Sed a nisi. Nulla sed augue ut risus\n"
- "placerat porttitor. Ut aliquam. Nulla\n"
- "facilisi. Nulla vehicula nibh ac sapien.\n"
- "Nunc facilisis dapibus ipsum. Donec sed\n"
- "mauris. Nulla quam nisi, laoreet non,\n"
- "dignissim posuere, lacinia nec, turpis.\n"
- "Mauris malesuada nisi sed enim. In hac\n"
- "habitasse platea dictumst. Fusce\n"
- "faucibus, turpis nec auctor posuere,\n"
- "nulla tellus scelerisque metus, quis\n"
- "molestie mi dui id quam. Mauris\n"
- "vestibulum. Nam ullamcorper.\n" ) );
- free ( res );
- res = wordWrap ( 80, s1 );
- assert ( ! strcmp ( res,
- "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer metus pede,\n"
- "pretium vitae, rhoncus et, auctor sit amet, ligula. Integer volutpat orci et\n"
- "elit. Nunc tempus, urna at sollicitudin rutrum, arcu libero rhoncus lectus,\n"
- "vitae feugiat purus orci ultricies turpis. Pellentesque habitant morbi tristique\n"
- "senectus et netus et malesuada fames ac turpis egestas. Nam in pede. Etiam eu\n"
- "sem id urna ultricies congue. Vestibulum porttitor ultrices neque. Mauris\n"
- "semper, mauris ut feugiat ultricies, augue purus tincidunt elit, eu interdum\n"
- "ante nisl ac ante. Pellentesque dui. Vestibulum pretium, augue non cursus\n"
- "pretium, nibh dolor laoreet leo, sed pharetra pede libero non diam.\n"
- "\n"
- "Proin est nisi, gravida ac, vulputate id, fringilla sit amet, magna. Nam congue\n"
- "cursus magna. In malesuada, velit a gravida sodales, dolor nisl vestibulum orci,\n"
- "sit amet sagittis mauris tellus nec purus. Nulla eget risus. Quisque nec sapien\n"
- "blandit odio convallis ullamcorper. Lorem ipsum dolor sit amet, consectetuer\n"
- "adipiscing elit. Pellentesque cursus. Aliquam tempus neque vitae libero molestie\n"
- "ut auctor.\n"
- "\n"
- "In nec massa eu tortor vulputate suscipit. Nam tristique magna nec pede. Sed a\n"
- "nisi. Nulla sed augue ut risus placerat porttitor. Ut aliquam. Nulla facilisi.\n"
- "Nulla vehicula nibh ac sapien. Nunc facilisis dapibus ipsum. Donec sed mauris.\n"
- "Nulla quam nisi, laoreet non, dignissim posuere, lacinia nec, turpis. Mauris\n"
- "malesuada nisi sed enim. In hac habitasse platea dictumst. Fusce faucibus,\n"
- "turpis nec auctor posuere, nulla tellus scelerisque metus, quis molestie mi dui\n"
- "id quam. Mauris vestibulum. Nam ullamcorper.\n" ) );
- free ( res );
- return 0;
- }
- #endif /* __PROGTEST__ */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement