leetcode 第184场周赛第一题(数组中的字符串匹配)

2021-02-18 15:20

阅读:428

标签:def   直接   turn   没有   函数   src   col   dss   越界   

技术图片

 

 一、函数的运用

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])+1);

就是直接复制words[i];

二、malloc开辟二维字符串;

首先开辟一个指向字符串指针的指针;

char **arr = (char**)malloc(sizeof(char*)*wordsSize);

等判断出适合题目的子串后

再开辟一个字符串指针

arr[cnt] = (char*)malloc(sizeof(char)*(strlen(words[i])+1));

 

 

最后代码如下

 1 char ** stringMatching(char ** words, int wordsSize, int* returnSize){
 2     int cnt = 0;
 3     char **arr = (char**)malloc(sizeof(char*)*wordsSize);
 4     for(int i = 0; i )
 5     {
 6         for(int j = 0; j )
 7         {
 8             if(i != j)
 9             {
10                 if(strstr(words[j],words[i]) != NULL)
11                 {
12                     arr[cnt] = (char*)malloc(sizeof(char)*(strlen(words[i])+1)); 
13                     memcpy(arr[cnt], words[i], strlen(words[i])+1);
14                    //上面两行+1是为了多开辟一个空间给arr[cnt]存下words[i]字符串后末尾的‘\0‘
15                    //因为strlen函数返回的长度是不包含‘\0‘的长度
16                    //且memcpy返回的arr在字符串结束后最后一位是没有‘\0‘
17                    //一定要记住加‘\0‘!!不然会越界! 
18                     cnt++;
19                     break;
20                 }
21             }
22         }
23     }
24     *returnSize = cnt;
25     return arr;
26 
27 
28 }

 (希望下次easy题不要再抄作业了 ̄ω ̄)

leetcode 第184场周赛第一题(数组中的字符串匹配)

标签:def   直接   turn   没有   函数   src   col   dss   越界   

原文地址:https://www.cnblogs.com/luoyoucode/p/12688777.html


评论


亲,登录后才可以留言!