首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >reverse()和学习指针

reverse()和学习指针
EN

Stack Overflow用户
提问于 2013-08-16 09:37:05
回答 2查看 240关注 0票数 1

我知道有很多像我这样的问题,但读了几个问题对我没有帮助。可能是因为我在编程方面是新手,在使用指针方面有困难。

作为练习,我尝试在c++中创建一个函数来反转输入的字符串。下面是我的函数:

代码语言:javascript
复制
char* reverse(const char* t)
{
    int j, k;
    char* aString = new char[100];

    for(j=0, k=strlen(t)-1; j < strlen(t); j++, k--)
    {
        aString[j]=t[k];
    }

    aString[j+1]='\0';

    return aString;
}

但是,输入根本不会反转。我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2013-08-16 09:50:26

在C++中,您有一个更好、更干净、更安全、更容易和更具可读性的选项- std::string

下面是一个返回反向std::string的函数reverse()的简单示例

代码语言:javascript
复制
void swap(string& str, int index1, int index2) {

    char temp = str[index1];
    str[index1] = str[index2];
    str[index2] = temp;

}

string reverse(string str) {

    int size = str.size();

    for (int i = 0; i < size / 2; i++) 
        swap (str, i, size - i - 1);

    return str;

}
票数 0
EN

Stack Overflow用户

发布于 2013-08-16 10:03:37

运行良好,对样式和更好的行为进行了一些细微的修改:

代码语言:javascript
复制
#include <iostream>
#include <cstring>

char* reverse(const char* t);

int main() {
    const char* mystring = "reverse me";
    char* revstring = reverse(mystring);

    std::cout << "Before reversing: " << mystring << std::endl
              << "After reversing: " << revstring << std::endl;

    delete[] revstring;
    return 0;
}

char* reverse(const char* t) {
    size_t j;
    int k;
    char* aString = new char[100];

    for(j = 0, k = std::strlen(t) - 1; j < std::strlen(t); j++, k--) {
        aString[j] = t[k];
    }

    aString[j] = '\0';

    return aString;
}

正如其他人所说,作为学术练习,这很好,但如果可以避免,最好不要在C++中使用C字符串,最好将strlen()移出循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18264486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档