C++ <利用指针翻转字符串>

C++字符串反转
本文介绍了一个简单的C++程序,该程序能够实现字符串的反转功能。通过使用双指针技巧,程序实现了对输入字符串的就地反转,展示了基本的C++编程技术和算法思想。

运行结果:

Enter a string: The new operator takes a type for its argument.
.tnemugra sti rof epyt a sekat rotarepo wen ehT

reverseString.cpp

#include <iostream>
#include <string>

using namespace std;

void reverseString(string& s);

int main() {
    string s;

    cout << "Enter a string: ";
    getline(cin, s);

    reverseString(s);

    cout << s << '\n';

    return 0;
}

void reverseString(string& s) {
    for (char *front = &s[0], *rear = &s[s.length() - 1], tmp; front < rear; front++, rear--) {
        tmp = *front;
        *front = *rear;
        *rear = tmp;
    }
}
C++中,使用指针来反转字符串时,如果没有正确初始化指针可能会导致未定义的行为。这是因为指针如果没有指向有效的内存位置,它就可能是无效的,尝试访问这样的指针可能会引发运行时错误,如段错误(segmentation fault)。 以下是一个简单的例子,展示了如何正确地反转字符串以及处理可能的指针未初始化情况: ```cpp #include <iostream> #include <string> std::string reverseString(const std::string& str) { // 检查指针是否有效 if (str.empty()) { std::cout << "Error: String is empty, cannot reverse.\n"; return ""; } char* start = const_cast<char*>(str.c_str()); // 将常量字符串转换为可修改的字符数组 char* end = start + str.length() - 1; // 获取字符串的结束位置 // 反转字符串 while (start < end) { std::swap(*start, *end); start++; end--; } return std::string(start, end + 1); // 注意:这里不需要复制,因为我们只改变了原始字符串字符顺序 } int main() { std::string input; std::cout << "Enter a string: "; std::cin >> input; std::string reversed = reverseString(input); // 验证反转结果 if (!reversed.empty()) { std::cout << "Reversed string: " << reversed << std::endl; } return 0; } ``` 在这个代码中,我们首先检查输入的字符串是否为空,如果为空则返回一个错误消息。接着,我们使用两个指针`start`和`end`从字符串两端开始交换字符,直到它们相遇。最后,我们将`start`作为`std::string`构造函数的起始位置,这样就得到了反转后的字符串。 相关问题-- 1. 在反转字符串过程中,为什么要用`const_cast`来处理`str.c_str()`? 2. 如果指针没有初始化就直接使用,程序会有什么后果? 3. 在`main`函数中,为什么要在创建`reversed`字符串时判断`reversed`是否为空?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值