函数将返回一个字符串,该字符串包含两个索引之间的部分

时间:2016-01-27 08:54:53

标签: c++ arrays string pointers function-pointers

我有一个问题,我怎么能在char数组的范围(由用户给出)之间返回一个字符串。 示例:

  Entered string is “My name is john".

开始索引:3 停止指数:6 函数将返回“名称”

我的代码在这里,但我只能将地址作为输出

#include <iostream>
#include <conio.h>
#include <string>
#include <cstring>
using namespace std;

string *section(char*ary, int index_1, int index_2)
{
    string sec=ary;
    string *str;
    str = &sec;
    *str = sec.substr(index_1, index_2);
    return str;
}


int main()
{
    int starting_index = 0;
    int ending_index = 0;

    char *ptr;
    ptr = new char[200];
    int i = 0;
    char ch = _getche();
    while (ch != 13)
    {

        ptr[i] = ch;
        i++;
        ch = _getche();
    }
    for (int j = 0; j < i; j++)
    {
        cout << ptr[j];
    }
    cout << endl;

    cout << "Enter start index: " << endl;
    cin >> starting_index;
    cout << "Enter end index: " << endl;
    cin >> ending_index;
    cout<<section(ptr, starting_index, ending_index);

   delete[] ptr;
  system("pause");
}

1 个答案:

答案 0 :(得分:0)

你的主要问题是你返回一个指针。换句话说,您返回一个字符串对象的地址。这有两个影响。首先,将返回的地址传递给cout,而不是指向的字符串。如果你打算打印字符串,那么你应该取消引用指针。但还有另一个问题。返回的指针无效,因为它指向在函数结束时销毁的本地对象。所以你可能不会取消引用指针。这没用。

这两个问题都可以通过从section返回一个字符串而不是一个地址来解决。

  请解释这两个原型之间的区别。字符串部分(参数)和字符串*部分(参数)

函数名左侧的部分(section)是函数返回的对象的类型。 stringstring*类型之间的区别在于后者是指针类型。指针的值是指向对象所在的内存地址。因此,前一个函数原型声明了一个返回string的函数,而后者声明了一个返回指向string的指针的函数。

除了bug之外,其他一些提示:该函数用指针轻轻地摆弄。 str变量是不必要的。你永远不会使用索引参数。在main中,您执行了不必要的动态分配。