一、函数的运用
1,strstr(a,b);
判断b是否为a的子串,如果是,返回从b的开头开始到a的结尾
如“abcdefgh” “de”
返回“defgh”;
如果不是子串,返回NULL;
2,memcpy(a,b+n,c);
将b串从第n位后的c个字符串复制到a中,返回a串;
(注:做完函数后需要添加上b[c] = ‘\0’)
如果吧b+n换成b就是从头开始
将代码换成
memcpy(arr[cnt], words[i], strlen(words[i])+);
就是直接复制words[i];
二、malloc开辟二维字符串;
首先开辟一个指向字符串指针的指针;
char **arr = (char**)malloc(sizeof(char*)*wordsSize);
等判断出适合题目的子串后
再开辟一个字符串指针
arr[cnt] = (char*)malloc(sizeof(char)*(strlen(words[i])+1));
最后代码如下
char ** stringMatching(char ** words, int wordsSize, int* returnSize){
int cnt = ;
char **arr = (char**)malloc(sizeof(char*)*wordsSize);
for(int i = ; i < wordsSize; i++)
{
for(int j = ; j < wordsSize; j++)
{
if(i != j)
{
if(strstr(words[j],words[i]) != NULL)
{
arr[cnt] = (char*)malloc(sizeof(char)*(strlen(words[i])+));
memcpy(arr[cnt], words[i], strlen(words[i])+);
//上面两行+1是为了多开辟一个空间给arr[cnt]存下words[i]字符串后末尾的'\0'
//因为strlen函数返回的长度是不包含'\0'的长度
//且memcpy返回的arr在字符串结束后最后一位是没有'\0'
//一定要记住加'\0'!!不然会越界!
cnt++;
break;
}
}
}
}
*returnSize = cnt;
return arr; }
(希望下次easy题不要再抄作业了 ̄ω ̄)