C语言一行输入多个字符串(全小写字母),为什么程序跑着跑着字符串就变成了乱码?
具体题目是:牛客网上,考研机试题目各校真题,KY91,“String Matching”。链接如下:https://www.nowcoder.com/practice/00438b0bc9384ceeb65613346b42e88a?tpId=40&tqId=21422&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan&difficulty=&judgeStatus=&tags=/question-ranking
(之前标题里面搞错了,写成KY168了,应该是KY91,现在改过来了)
前3张图片是代码,main()函数里面我用了一堆printf(),因为输入的两个字符串在后续使用的时候出了问题,第4张图片是牛客网的输出,在调用get_next()函数后,明明不关text[]数组的事儿,但是text[]数组在之后莫名其妙地变成了乱码,而我在本地运行的话,运行了3次,一直都是正常,如图片5。 朋友们帮忙分析下,到底是哪儿出了问题?
(尝试过是不是输入格式的问题,但是text[]和pattern[]分开输入之后,bug依然存在)





后续:还是没有发现问题所在,调试了几乎一个下午,发现这个bug会呈现各种稀奇古怪的形式,因为挺离奇的,就不再这里一一赘述了,最终姑且认为是牛客网的问题,算它过了!
如果有哪位友友发现了问题真正所在,欢迎前来指导或讨论。
另:附上代码
#include<stdio.h>
#include<string.h>
using namespace std;
void get_next(char pattern[], int next[]){
int j = 0, k = -1;
next[j] = k;
while(j < strlen(pattern)){
if(k == -1 || pattern[j] == pattern[k]){
j++;
k++;
next[j] = k;
}else{
k = next[k];
}
}
}
int KMP_2nd(char text[], char pattern[], int next[]){
int i = 0, j = 0, cnt = 0;
while(i < strlen(text)){
if(j == -1 || text[i] == pattern[j]){
i++;
j++;
}else{
j = next[j];
}
if(j == strlen(pattern)){
cnt++;
j = next[j];
}
}
return cnt;
}
int main(){
char text[1000001], pattern[1000001];
while(scanf("%s %s", text, pattern) != EOF){
int next[strlen(pattern)];
get_next(pattern, next);
int cnt = KMP_2nd(text, pattern, next);
printf("%d\n", cnt);
}
return 0;
}
—— ~ ~——
后记:大概两个月后我再次做了下,这次的代码与上次基本相同,没有报错,也许上次是牛客网临时卡了个bug?