对任意一个输入字符串,完成前后翻转,本函数的好处,就是支持中英文混排字符串的翻转。 正向扫描输入字符串,判断当前字节是否大于128,确认当前位置是否为汉字的第一个字节,并将当前字节或两个连续字节(这是一个汉字)保存在堆栈中,直到当前字符串处理完
正向扫描输入字符串,判断当前字节是否大于 128 ,确认当前位置是否为汉字的第一个字节,并将当前字节或两个连续字节(这是一个汉字)保存在堆栈中,直到当前字符串处理完毕。
对堆栈中的数据进行扫描,逐个字(可以是单字节的 ASCII,也可以是一个汉字)恢复到当前字符串中。 <无>
/* ** 利用堆栈完成拆分字符串后每个字(英文是单字节,中文则是双字节) 的数据保存。 */ char *reve_string( char * str ) { char temp[3] ; // 准备用来保存出栈的 字 信息 chr *s ; // 输入字符串扫描指针 int wset ; // 正向扫描时,当前字长度计数 assert( str != NULL); s = str ; while ( *s ) { if( (*s & 0x80) == 0x80 ) wset = 2 ; else wset = 1; push_stack( s, wset ) ; // 将 wset 字节数据保存到堆栈中 s += wset ; } // 扫描堆栈中数据,逐个 字 完成数据出栈操作。 s = str ; while ( (n = pop_stack( temp )) > 0 ) { memcpy(s, temp, n ); } return str ; } int main(int ac, char *av[] ) { char temp[128]; if( ac < 2 ) { printf("%s strings\n", av[0]); return 0; } strcpy(temp, av[1]); printf("原字符串=【%s】\n", temp); reve_string( temp ); // 完成 temp 字符串的翻转 printf("翻转后字符串=【%s】\n", temp); return 0; }