开发工具:
文件大小: 20kb
下载次数: 0
上传时间: 2020-05-13
详细说明:面试题,是纸上写的,发现了些错误,回来改进了下。写纸上和写计算机里并编译成功完全是两个效果。
开始没太多字符串操作,很繁琐、难点也多,后逐渐改进。
典型问题1:
sizeof()局限于栈数组
char a[] = "asd213123123";
形式,并且这种不能用'\0'判断是否结束(这种判断方式能很方便加在while条件中用于判断越界——b != '\0')。
如果是字符串常量:
char *b = "dasadafasdf";
这种情况,sizeof()就废掉了!
总之:
对号入座,前者sizeof、后者strlen~!不过sizeof(a)和strlen(b)还有另外一个区别,strlen不计算'\0',而sizeof要计算(前提是sizeof()不针对char指针)
典型问题2:
用什么来暂存并输出结果?还是只是记录下来相关位置——这是我底下未完成版本1想到的思路——用一个count[sizeof(A)]数组记录下A每个位置作为起点所能和B达到的最大重合,最后判断查找数组中最大值,此时目标子字符串的起点下标(i)和 i 对应的长度(counter[i])都有了。
这是针对不知道字符串大小并且不占用额外空间的做法,需要非常繁琐的操作,要加很多标记,越界判断也会有些麻烦(结合优势么,用字符串常量而不是栈空间中的字符数组,有'\0'——就好判断了!)
(关于空间的占用,如果要用一个和字符串a一样长的数组counter来计录a中各起点对应与b最大重合子字符串,这个数组也要和a一样长,空间上也不合适,除非情形很特殊,a短b长,不然不如直接malloc()一个堆空间来储存当前最长“子字符串”,并实时更新)
先放一个改完编译测试成功的。
release1
//题目:要求比较A字符串(例如“abcdef"),B字符串(例如(bdcda)。找出重合度最大的子字符串,输出(根据OJ经验,输>出结果对即可)
#include
#include
#include
main(){
char *A = "abcderfghi";
char *B = "aderkkkkkabcd";
int i,j,c = 0,count = 0;
unsigned int maxSeg = 0;
int max = strlen(A) > strlen(B) ? strlen(A) : strlen(B);
char* final = (char*)malloc(sizeof(char) * (max + 1));
final[max] = '\0';
for(i = 0;A[i] != '\0';i++){
for(j = 0;B[j] != '\0';j++){
while(A[i + c] == B[j] && A[i+c] != '\0' && B[j] != '\0'){
count++;
c++;
j++;
}
if(count > maxSeg){
strncpy(final,(A + i),count);
maxSeg = count;
}
count = 0;
c = 0;
}
}
printf("%s\n",final);
free(final);
}
这是能将就用的第一个版本~!关于结束符'\0'能否影响free()的使用,觉得是完全不用操心的,因为malloc的大小是系统来保存的,删除时候系统来接手就完了,而'\0'结束符只是针对一些常规字符串操作,比如printf()用%s控制输出时~!
新难点:找到的子字符串同时一样长怎么办?那我这只能叫做”第一个最长的重合字符串“用两块空间来存储?三
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.