广州建站外贸网站,漳州北京网站建设,自主网站制作,设计网站printerest反转字符串原理其实就是交换位置#xff0c;以中间为分隔点#xff1b; 基本套路#xff1a;遍历前一般字符#xff0c;互换位置#xff1b; for循环模板
void reverseString(char* s, int sSize){char temp;for (int i 0, j sSize - 1; i sSize/2; i, j--) {temp…反转字符串原理其实就是交换位置以中间为分隔点 基本套路遍历前一般字符互换位置 for循环模板
void reverseString(char* s, int sSize){char temp;for (int i 0, j sSize - 1; i sSize/2; i, j--) {temp s[i];s[i] s[j];s[j] temp;}
}while模板
void reverse(char *s,int left,int right) {char ch;while(left right) {ch s[left];s[left] s[right];s[right] ch;left;right--;}
}题目1
void reverse(char *s,int left,int right) {char ch;while(left right) {ch s[left];s[left] s[right];s[right] ch;left;right--;}
}
char * reverseStr(char * s, int k){int len strlen(s);for(int i 0; i len; i (2 * k)) {if( i k len) {reverse(s,i, len -1);} else {reverse(s, i, i k -1);}}return s;}题目2 思路strlens) 遇到\0 停止 1.怎么判定一个单词单词的下一个字符是空格 2.反转字符串每个单词的字符顺序那么把每个单词当做一个小字符串来处理 3.确定边界.字符串以空字符结尾,空字符的下一个字符才是第二个单词的开始。
void reverse(char *s, int left, int right){char temp;while (left right) {temp s[left];s[left] s[right];s[right] temp;left;right--;}
}
char * reverseWords(char * s){int len strlen(s);//只能得到let的长度int i 0;while (i len) {int start i; // 新单词开始的长度while(i len s[i] ! ) {i;//统计单词长度}reverse(s,start,i -1);while(i len s[i] ) {// 该单词完成反转 跳到下一个单词i;}}return s;
}void swap(char *c1, char *c2) {char tmp *c1;*c1 *c2;*c2 tmp;
}char *reverseOnlyLetters(char *s){int n strlen(s);int left 0, right n - 1;while (true) {while (left right !isalpha(s[left])) { // 判断左边是否扫描到字母left;}while (right left !isalpha(s[right])) { // 判断右边是否扫描到字母right--;}if (left right) {break;}swap(s left, s right);left;right--;}return s;
}题目三;
void reverseString(char* s, int sSize){char temp;for (int i 0, j sSize - 1; i sSize/2; i, j--) {temp s[i];s[i] s[j];s[j] temp;}
}题目四 用 “ the sky is blue ” 举例说明源字符串长度为 21。
移除多余的空格“the sky is blue”此时字符串的长度变为了 15 反转整个字符串“eulb si yks eht” 反转每一个单词“blue is sky the”
void reverse(char* s, int start, int end) {while (start end) {char temp s[start];s[start] s[end];s[end--] temp;}
}
char * reverseWords(char * s){// 1. 移除多余空格int len strlen(s);int fast 0, slow 0;// 移除字符串之前的空格while (s[fast] ) {fast;}// 移除单词之间多余的空格while (fast len - 1) {if (s[fast] s[fast 1] ) {fast;} else {s[slow] s[fast];}}// 移除字符串后面的空格if (s[fast] ) {s[slow] \0;} else {s[slow] s[fast];s[slow] \0;}// 2. 反转整个字符串reverse(s, 0, slow - 1);// 3. 反转每一个单词for (int i 0; i slow; i) {int j i;while (j slow s[j] ! ) {j;}reverse(s, i, j - 1);i j;}return s;
}