#include #include #include #include unsigned char table[256]; void create(void){ unsigned char patt[2]; unsigned char dest[2]; int i; table[0]=0; patt[1]=0; for(i=1;i<256;i++){ patt[0]=i; strxfrm(dest,patt,2); table[dest[0]]=patt[0]; } } char* make_greater_string(const unsigned char *word){ unsigned char *workstr; int len; workstr=strdup(word); while ((len = strlen(workstr)) > 0) { unsigned char *lastchar = (unsigned char *) (workstr + len - 1); unsigned char tmp[2]; while (*lastchar < (unsigned char) 255) { strxfrm(tmp,lastchar,2); *lastchar=(unsigned char)table[tmp[0]+1]; return workstr; /* Success! */ } *lastchar = '\0'; } free(workstr); return NULL; } int main(int argc, char *argv[]){ unsigned char *newword; if (argc<2){ printf("Usage: %s word\n",argv[0]); return 1; } setlocale(LC_ALL,""); create(); printf("---\n%s\n---\n",&table[20]); printf("Word is '%s'\n",argv[1]); newword=make_greater_string(argv[1]); printf("Bigger word is '%s'\n",newword); return 0; }