// reverses string within a start and end range void reversestring(char str[]) { char temp = ' '; int len = strlen(str); reversestring(str,0,len+1); }
void reversewords(char *str) { assert(str); char *ptra = str; char *ptrb = str; // skip first whitespaces while (ptra && *ptra && *ptra == ' ') ptra++; ptrb = ptra; while (ptra && *ptra != '\0') { while (*ptrb != '\0' && *ptrb != ' ') ptrb++; reversestring(ptra, ptrb-1); while (*ptrb != '\0' && *ptrb == ' ') ptrb++; ptra = ptrb; } reversestring(str, --ptrb); }
int ispalindrome(int test) { char willflip[15]; char willkeep[15]; int compare; //get the integer into a string //itoa is not standard, let's try something else. //itoa (test, willflip, 10); sprintf(willflip, "%i", test); //move the string to something we want untouched strcpy(willkeep, willflip); //strrev does what you'd think reversestring(willflip); //strcmp returns 0 if equal compare = strcmp (willkeep, willflip); if (compare == 0) return 1; else return 0; }
/** * Compresses the input text and writes the compressed data to a file. * @param[in] filename name and path of the file to compress. * @param[in] compressed name and path of the compressed output file. * @param[in] algorithm the algorithm that will be used to build the suffix tree (Ukkonnen or Kurtz). * @param[in] see if see will be used. */ static void zip(char *filename, char *compressed, BOOL algorithm, int parts, BOOL see) { Uchar *origText, *prevText = NULL; Uint origTextLen, partTextLen, currentTextLen; FILE *compressed_file; int i, part; fsmTree_t stree = NULL, prevTree = NULL; BOOL alloc = False; #ifdef WIN32 HANDLE hndl; origText = (Uchar *) file2String(filename, &origTextLen, &hndl); #else origText = (Uchar *) file2String(filename, &origTextLen); #endif if(origText == NULL) { fprintf(stderr,"Cannot open file %s\n", filename); exit(EXIT_FAILURE); } /*if(textLen > MAXTEXTLEN) { fprintf(stderr,"Sorry, textlen = %lu is larger than maximal textlen = %lu\n", (Showuint) textLen,(Showuint) MAXTEXTLEN); exit(EXIT_FAILURE); }*/ if (!compressed) { CALLOC(compressed, Uchar, strlen(filename) + 5); strcpy(compressed, filename); strcat(compressed, ".ctx"); alloc = True; } compressed_file = fopen(compressed, "wb"); if (!compressed_file) { printf( "Could not open output file"); exit(1); } if (alloc) FREE(compressed); buildAlpha(origText, origTextLen); printf ("Alphasize: %ld\n", alphasize); printf("Algorithm %d\n", algorithm); setMaxCount(); /* write magic number */ putc(MAGIC >> 8, compressed_file); putc(MAGIC, compressed_file); /* write # of parts */ putc(parts, compressed_file); initialize_output_bitstream(); initialize_arithmetic_encoder(); writeAlphabet(compressed_file); currentTextLen = 0; for (part = 1; part <= parts; part++) { printf("---------- part %d ---------------\n", part); if (part != parts) { partTextLen = floor(origTextLen / parts); } else { partTextLen = origTextLen - (floor(origTextLen / parts) * (parts - 1)); } if (part > 1) { prevText = text; prevTree = stree; } textlen = partTextLen; CALLOC(text, Uchar, textlen); reversestring(origText + currentTextLen, textlen, text); if (algorithm == UKKONEN) { suffixTree_t tree = initSuffixTree(); buildSuffixTree(tree); printf("Tree built\n"); pruneSuffixTree(tree); stree = fsmSuffixTree(tree); } else { stree = buildSTree(); printf("Tree built\n"); } /*if (part > 1) { copyStatistics(prevTree, stree, prevText); FREE(prevText); freeFsmTree(prevTree); }*/ DEBUGCODE(printf("gamma hits: %d gamma Misses: %d\n", getHits(), getMisses())); printf("height: %ld\n", getHeight(stree)); /* write textlen */ for (i=3; i>=0; i--) { writeByte(textlen >> (8 * i), compressed_file); } printf ("Textlen: %ld\n", textlen); writeFsmTree(stree, compressed_file); printf("FSM...\n"); makeFsm(stree); DEBUGCODE(printFsmTree(stree)); printf("Encoding...\n"); encode(stree, compressed_file, origText + currentTextLen, partTextLen, see); currentTextLen += partTextLen; } FREE(text); freeFsmTree(stree); flush_arithmetic_encoder(compressed_file); flush_output_bitstream(compressed_file); #ifdef WIN32 freetextspace(origText, hndl); #else freetextspace(origText, origTextLen); #endif fclose(compressed_file); }