写一个程序,输出从 1 到 n 数字的字符串表示。
-
如果 n 是3的倍数,输出“Fizz”;
-
如果 n 是5的倍数,输出“Buzz”;
3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。
示例:
n = 15,
返回:
[
“1”,
“2”,
“Fizz”,
“4”,
“Buzz”,
“Fizz”,
“7”,
“8”,
“Fizz”,
“Buzz”,
“11”,
“Fizz”,
“13”,
“14”,
“FizzBuzz”
]
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
char** fizzBuzz(int n, int* returnSize) {
*returnSize=n;
char **result=(char**)malloc(n*sizeof(char*));//申请一个n行字符串数组,每行是一个char类型的指针
char character[10];
for(int i=1;i<=n;i++)
{
if((i%15)==0)
{
sprintf(character,"%s","FizzBuzz");
}
else if((i%3)==0)
{
sprintf(character,"%s","Fizz");
}
else if(i%5==0)
{
sprintf(character,"%s","Buzz");
}
else
sprintf(character,"%d",i);
result[i-1]=malloc(sizeof(character));
memcpy(result[i-1],character,strlen(character)+1);//将character中的strlen(character)+1个字符放在result[i-1]之中,加一是为了将'\0'放进来
memset(character,' ',10);//清空character数组,方便下次使用,
}
return result;
}
时间浪费在错误将%s,写成s%
好好理解第一行注释
memcpy(str1,str2,n), 从存储区 str2 复制 n 个字符到存储区 str1。
memset(str, c, n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。