В попытке решить проблему из учебника я пытаюсь создать версию функции strstr()
без учета регистра, которая написана на языке Си.Пока что я столкнулся с двумя проблемами.Первая проблема заключалась в том, что когда я делал регистронезависимую версию strstr()
, она работала, но не остановилась на первой совпадающей строке и продолжала возвращать строку, даже если они не совпадали.
strstr()
должен увидеть первый экземпляр совпадающего символа до указанного числа n и затем остановиться.Как если бы я написал: "Xehanort"
в строке A
и "Xemnas"
в строке B
и указал 4
, в качестве number
он вернул бы Xe
.
Идея, лежащая в основе версии без учета регистра, заключается в том, что я могу написать: "Xehanort"
в одной строке и "xemnas"
в следующей строке и вернуть ее Xe
.
Однако яЯ столкнулся с новой проблемой в новом коде, который я пробовал: похоже, функция вообще не хочет запускаться.Я проверил это, и оказалось, что функция, кажется, находится в аварийном состоянии, и я не уверен, как заставить это остановиться.
Я пытался редактировать код, я пытался использовать разные циклы for, но решил, что код пока не должен быть слишком сложным, я также пробовал совершенно другой код, чем вы собираетесьчитать, но это привело к проблеме, упомянутой ранее.
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>
#define MAX 100
char *stristr4(const char *p1, const char *p2, size_t num);
int main() {
char c[MAX], d[MAX];
printf("Please enter the string you want to compare.");
gets(c);
printf("Please enter the next string you want to compare.");
gets(d);
printf("The first string to be obtained from \n%s, and \n%s is \n%s",
c, d, stristr4(c, d, MAX));
}
char *stristr4(const char *p1, const char *p2, size_t num) {
const char *str1 = p1;
const char *str2 = p2;
char *str3;
int counter = 0;
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
if (tolower(str1[i]) == tolower(str2[j])) {
str3[i] = str1[i];
counter++;
} else {
if (counter > 0) {
break;
} else
continue;
}
}
}
return str3;
}
Код, который вы увидите, запросит строки, которые вы хотите ввести.В идеале он должен возвращать ввод.
Затем он должен выполнить функцию stristr
и вернуть первый экземпляр совпадающей строки с учетом регистра.
Однако созданная мной функция, похоже, даже не запускается.