我有一个问题,我怎么能在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");
}
答案 0 :(得分:0)
你的主要问题是你返回一个指针。换句话说,您返回一个字符串对象的地址。这有两个影响。首先,将返回的地址传递给cout
,而不是指向的字符串。如果你打算打印字符串,那么你应该取消引用指针。但还有另一个问题。返回的指针无效,因为它指向在函数结束时销毁的本地对象。所以你可能不会取消引用指针。这没用。
这两个问题都可以通过从section
返回一个字符串而不是一个地址来解决。
请解释这两个原型之间的区别。字符串部分(参数)和字符串*部分(参数)
函数名左侧的部分(section
)是函数返回的对象的类型。 string
和string*
类型之间的区别在于后者是指针类型。指针的值是指向对象所在的内存地址。因此,前一个函数原型声明了一个返回string
的函数,而后者声明了一个返回指向string的指针的函数。
除了bug之外,其他一些提示:该函数用指针轻轻地摆弄。 str
变量是不必要的。你永远不会使用索引参数。在main
中,您执行了不必要的动态分配。