#include <stdio.h> #include <string.h> void swap(char *a, char *b){ char wk = *a; *a = *b; *b = wk; } void strpartrev(char *s, int len){ int i,j; for(i=0,j=len-1; i<len/2 ;++i,--j) swap(s + i, s + j); } char *strwordrev(char *str, char delimiter){ //str change destructively int sp = -1, wordlen=0; char stack[16], *p=str; while(*p){ if(*p == delimiter){ strpartrev(stack + sp - wordlen + 1, wordlen); wordlen = 0; } else { ++wordlen; } stack[++sp] = *p++; } strpartrev(stack + sp - wordlen + 1 , wordlen); p = str; do{ *p++ = stack[sp--]; }while(sp>=0); return str; } char *strWordRev(char *str, char delimiter){ //str change destructively char *head, *tail; int len = strlen(str); head = str; while(tail = strchr(head, delimiter)){ strpartrev(head, tail - head); head = tail + 1; } strpartrev(head, str + len - head); strpartrev(str, len); return str; } int main(void){ char *ip = "192.168.1.13"; char rip[16]; strcpy(rip, ip); printf("%s\n", strWordRev(rip, '.'));//13.1.168.192 return 0; }
source share