字符串逆序 普通逆序 1. 分配一个与原字符串等长的字符数组; 2. 反向拷贝一下即可。 char* reverseString(char* s) { //将q指向字符串最后一个字符 char* q = s ; while( *q ) { q++; } q -= 1 ; //分配空间,存储逆序后的字符串。 char* p = (char*)malloc(sizeof(char*)*(q-s+1)); char* r = p ; // 逆序存储 while(q >= s) { *p=*q; *p++; *q--; } *p = '\0' ; return r ; } 2.原地逆序 英文叫做in-place reverse。这是最常考的,原地逆序意味着不允额外分配空间,主要有以下几种方法,思想都差不多,就是将字符串两边的字符逐个交换。 方法一: 1. 设置两个 在C语言中,字符串逆序是一个常见的编程任务,主要分为几种不同的实现方法。下面我们将详细介绍这些方法。 1. **普通逆序**: 这种方法通过分配一个新的字符数组来存储逆序后的字符串。我们找到原字符串的末尾,然后从末尾开始反向拷贝到新分配的空间中。以下是一个示例代码: ```c char* reverseString(char* s){ char* q = s; while(*q) q++; q -= 1; char* p = (char*)malloc(sizeof(char*)*(q-s+1)); char* r = p; while(q >= s){ *p=*q; *p++; *q--; } *p = '\0'; return r; } ``` 2. **原地逆序(In-place Reverse)**: 原地逆序是在不额外分配空间的情况下实现字符串逆序。有多种方法可以实现,主要是通过交换字符串的首尾字符,逐步向中间移动。以下是两种常见的原地逆序方法: **方法一**: 使用两个指针,一个指向字符串头部,另一个指向尾部。每次交换两个指针指向的字符,并向中间移动,直到两个指针交叉。 ```c char* reverseString(char* s) { char* p = s; char* q = s; while(*q) ++q; q--; while(q > p) { char t = *p; *p = *q; *p++ = *q--; } return s; } ``` **方法二**: 使用递归方法,定义逆序区间的起始和结束,通过递归调用来实现逆序。 ```c void Reverse(char* s, int left, int right) { if(left >= right) return; char t = s[left]; s[left] = s[right]; s[right] = t; Reverse(s, left + 1, right - 1); } ``` **方法三**: 非递归的原地逆序,使用循环来交换字符。 ```c char* Reverse(char* s, int left, int right) { while(left < right) { char t = s[left]; s[left++] = s[right]; s[right--] = t; } return s; } ``` 3. **不允许临时变量的原地逆序**: 如果不允许使用临时变量,我们可以利用位操作,如异或(XOR),来交换两个字符。这种方法适用于原地逆序。 ```c char* Reverse(char* s) { char* r = s; char* p = s; while(*(p + 1) != '\0') ++p; while(p > s) { *p = *p ^ *s ; *s = *p ^ *s ; *p = *p-- ^ *s++ ; } return r ; } ``` 4. **按单词逆序**: 如果要按单词逆序字符串,首先需要确定单词的边界,通常以空格作为分隔。可以先遍历字符串,对每个单词进行逆序,然后再对整个字符串逆序。以下是大致思路: ```c // 对单词进行逆序的辅助函数 void ReverseWord(char* p, char* q){ while(p < q){ char t = *p; *p = *q; *q = t; p++; q--; } } // 按单词逆序整个字符串 void reverseSentence(char* s) { // 先按单词逆序 char* start = s; for(char* end = s; *end; end++) { if(*end == ' ') { ReverseWord(start, end); start = end + 1; } } ReverseWord(start, end); // 再整体逆序 Reverse(s, s, end); } ``` 以上就是C语言中字符串逆序的多种实现方式,涵盖了普通逆序、原地逆序以及按单词逆序的详细解析。在实际编程中,应根据具体需求选择合适的方法。
剩余6页未读,继续阅读
- 粉丝: 2994
- 资源: 1610
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助