Кажется, у меня проблемы с написанием функции поиска строки.strlength и strmid - это ранее написанные функции, которые были протестированы и работают.
int strfind(char * string1, char * string2)
{
/* if string1 contains the substring string2 returns
the starting position of string2 in string1
otherwise returns -1
e.g. strinc("hello world","wor") returns 6
strinc("hello world","war") returns -1
*/
int begPos = 0, endPos, count = 0, match = 1;
char *tempStr;
endPos = strlength(string2)-1;
while (endPos <= strlength(string1)-1)
{
strmid(string1, begPos, endPos, tempStr);
while (match == 1)
{
if (tempStr[count] == string2[count]) {
if (count < strlength(string2)) count++;
else break;
}
else match = 0;
}
if ( match == 1 ) return begPos;
else { begPos++;
endPos++; }
}
return -1;
}
Алгоритм должен выглядеть примерно так:
- Получить сегмент строки между begPos иendPos
- Сравните этот сегмент со строкой2
- Если они совпадают, увеличьте счетчик и проверьте адрес следующего массива
- Если нет, то строки не совпадают иВы еще не нашли сегмент в своей строке, и совпадение становится равным 0.
- Если совпадение не найдено, переместите ячейку массива в начале и конце позиции 1.
- Если match = 1, вернутьbegPos
- Повторяйте 6 предыдущих шагов, пока endPos не достигнет конца строки 1.
- Если endPos достигнет конца строки1, не найдя строку 2 в строке1, верните -1.
Проблема, с которой я столкнулся, заключается в том, что
while (match == 1)
{
if (tempStr[count] == string2[count]) {
if (count < strlength(string2)) count++;
else break;
}
else match = 0;
}
, кажется, никогда не достигает условия else.Возвращаемое значение всегда представляется значением, с которым инициализируется begPos.Это домашнее задание, но я переписывал его несколько раз, используя разные методы, например, для циклов, и выполнил несколько пробных прогонов и, похоже, не смог решить проблему.Любой свет, который вы можете пролить, будет очень полезен.
Приветствия,
espSquall
Функция strmid
void strmid(char * string1, int start, int end, char * string2)
{
/* copies the elements of string1 from start to end
to string2 */
int len, count2 = 0;
for (len = start; len <= end; len++)
{
string2[count2] = string1[len];
count2++;
}
string2[count2] = '\0';
}