題目簡介:
1.試寫一函式char* copystr(int n, const char *str),將str字串複製n次後回傳。
2.使用main()函式呼叫,呼叫敘述dupstr = copystr(n,srcstr);
3.印出dupstr。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//char a[80];
char* copystr(int n, const char *str){
int k = strlen(str);
char space[] = " ";
static char a[80];
strcpy(a,str);
for(int i = 1; i < n; i++){
strcat(a,space);
strcat(a,str);}
return a;
}
void main(void){
int n = 4;
char srcstr[] = "hello";
char *dupstr = copystr(n,srcstr);
puts(dupstr);
}
詢問,在函式內回傳字串:
1.定義於全域變數
2.使用靜態修飾變數static
才能確保函式結束時,字串資料不會被消除?有其他比較好的方法嗎?
使用 malloc
分配動態記憶體也是一種方法:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* a;
char* copystr(int n, const char *str){
int k = strlen(str);
char space[] = " ";
a = (char*)malloc((k*(n + 1))*sizeof(char));
strcpy(a,str);
for(int i = 1; i < n; i++){
strcat(a,space);
strcat(a,str);}
return a;
}
void main(void){
int n = 4;
char srcstr[] = "hello";
char *dupstr = copystr(n,srcstr);
puts(dupstr);
free(a) // to refrain memory leak
}
都用了string,
為什麼還用char?
C++要用char處理變動長度的字串很麻煩.
用string就好了.
#include <iostream>
using namespace std;
string copystr(int n, string str)
{
if (n <= 0)
return "";
if (n == 1)
return str;
return str + copystr(n - 1, str);
}
int main()
{
int n = 4;
string str = "hello";
string str2 = copystr(n, str);
cout << str2.c_str() << endl;
system("pause");
}