函数无法返回一个字符串,但可以返回字符串的地址,这样做更高效。下面的程序中,builder()函数中,该函数返回一个指针。该函数接受两个参数:一个字符和一个数字。函数使用new 创建了一个长度与数字参数相等的字符串,将每个元素都初始化为该字符,然后返回指向新字符串的指针。
说白了就是创建了N 个‘s’,N个‘+’,等等。
// Chapter7.5.2_strgback.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//a function that return a pointer to char
#include <iostream>
char* buildstr(char c,int n);//protype
int main()
{
using namespace std;
int times;
char ch;
cout << "Enter a character:";
cin >> ch;
cout << "Enter a integer:";
cin >> times;
char* ps = buildstr(ch,times);
cout << ps << endl;
delete[] ps;//free memory
ps = buildstr('+', 20);//reuse pointer
cout << ps << "-Done-" << ps << endl;
delete[] ps;
return 0;
}
//build string made of n c characters
char* buildstr(char c, int n)
{
char* pstr = new char[n + 1];
pstr[n] = '\0';//terminate string
while (n-- > 0)
pstr[n] = c;
return pstr;
}
程序说明
要创建包含n个字符的字符串,需要能够存储n+1个字符的空间,以便能够存储空值字符。
while (n-- > 0)
pstr[n] = c;
上面的循环将循环n次,直到n减少到0,这将填充n个元素。在最后一个循环开始时,n的值为1,由于n--意味着先使用这个值,然后将其递减,因此while循环测试条件将对1和0进行比较,发现测试为true,循环继续。测试后,函数将n减为0,因此pstr【0】是最后一个被设置为c的元素。这个n--比较令人费解,经过作者解释,我们就看明白了。先做判断的时候用的是,n为1,1>0,循环继续,然后马上就是n--,这样n就为0了,pstr【n】,就是pstr【0】了。
在主程序中使用的时候,记得要用delete ,这个和函数中的new 是成对出现的。