C++ 字符串单词逆序

#include<iostream>
using namespace std;
//char *str_(char a[], const char b[])//
//{
// char *p = a;
// while (*b != '\0')
// {
// *p = *b;
// b++;
// p++;
// }
// p++;
// *p = '0';
// return a;
//
//}
void f(char a[], int n,bool flag[])
{

for (int i = 0; i < n; i++)
{
if (a[i] == ' ')
flag[i] = true;
}

}


int main()
{
char ss[] = "I am a student";
int n = strlen(ss);
bool flag[20]{false};
f(ss, n,flag);
bool*p = flag;
for (int i = n; i >=0; i--)
{
int k = i;
if (*(p+k))
{
while (ss[k + 1] != ' '&&ss[k + 1] != '\0')
{
cout << ss[k + 1];
k++;
}
cout << ss[i];

}
}
int y = 0;
while (ss[y] != ' '&&ss[y] != '\0')
{
cout << ss[y];
y++;
}





}
### C++ 实现字符串逆序的方法及示例 在 C++ 中,实现字符串逆序可以通过多种方式完成,包括使用标准库函数、手动交换字符以及递归方法等。以下是几种常见的实现方式: --- #### 方法一:使用标准库函数 `std::reverse` C++ 标准库提供了 `std::reverse` 函数,可以方便地对容器(如 `std::string` 或数组)中的元素进行逆序操作[^1]。 ```cpp #include <iostream> #include <algorithm> // std::reverse using namespace std; int main() { string str = "Hello, World!"; reverse(str.begin(), str.end()); // 使用 std::reverse 逆序字符串 cout << "逆序后的字符串: " << str << endl; return 0; } ``` 上述代码中,`std::reverse` 接受两个迭代器参数,分别表示要逆序的范围起始和结束位置[^1]。 --- #### 方法二:手动交换字符 通过遍历字符串并交换首尾字符的方式实现逆序。这种方法不依赖于标准库函数,适合需要自定义逻辑的场景[^2]。 ```cpp #include <iostream> using namespace std; void reverseString(char* str, int start, int end) { while (start < end) { char temp = str[start]; str[start] = str[end]; str[end] = temp; ++start; --end; } } int main() { char str[] = "Hello, World!"; int len = strlen(str); reverseString(str, 0, len - 1); // 手动逆序字符串 cout << "逆序后的字符串: " << str << endl; return 0; } ``` 此方法通过双指针技术逐个交换字符,最终实现字符串逆序。 --- #### 方法三:递归实现 递归是一种优雅的解决方案,尤其适用于短字符串或教学目的。递归的基本思想是先处理子问题,再将当前字符添加到结果中[^3]。 ```cpp #include <iostream> using namespace std; void reverseRecursive(const string& str, int index) { if (index >= 0) { cout << str[index]; // 输出当前字符 reverseRecursive(str, index - 1); // 递归处理剩余部分 } } int main() { string str = "Hello, World!"; reverseRecursive(str, str.length() - 1); // 从最后一个字符开始递归 cout << endl; return 0; } ``` 递归方法的核心在于逐步缩小问题规模,并在回溯时输出字符[^3]。 --- #### 方法四:按单词逆序 如果需求是按单词逆序而非整个字符串逆序,则需要额外步骤:先逆序每个单词,再逆序整个句子[^4]。 ```cpp #include <iostream> using namespace std; void reverseWord(char* p, char* q) { while (p < q) { char temp = *p; *p = *q; *q = temp; ++p; --q; } } char* reverseSentence(char* s) { char* p = s; char* q = s; while (*q != '\0') { if (*q == ' ') { reverseWord(p, q - 1); // 逆序单词 q++; p = q; } else { q++; } } reverseWord(p, q - 1); // 逆序最后一个单词 reverseWord(s, q - 1); // 逆序整个句子 return s; } int main() { char str[] = "I am a student"; char* result = reverseSentence(str); cout << "按单词逆序后的字符串: " << result << endl; return 0; } ``` 此方法分为两步:先逆序每个单词,再逆序整个句子,从而实现按单词逆序的效果[^4]。 --- #### 方法五:逐字符输出逆序 如果只需输出逆序结果而无需修改原字符串,可以通过从后向前逐字符输出的方式实现[^5]。 ```cpp #include <iostream> using namespace std; int main() { char str[100] = ""; cin.getline(str, 100); // 输入字符串 int length = strlen(str); for (int i = length - 1; i >= 0; --i) { cout << str[i]; // 从后向前输出字符 } cout << endl; return 0; } ``` 此方法简单高效,特别适合只需要输出结果而不需保存逆序字符串的场景[^5]。 --- ### 总结 C++ 提供了多种实现字符串逆序的方法,具体选择取决于实际需求。如果追求简洁性,推荐使用 `std::reverse`;如果需要自定义逻辑,可以选择手动交换字符或递归方法;对于复杂需求(如按单词逆序),则需要结合多步操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值