Учу С++ по книге Страуструпа, есть такое задание в конце главы : "Напишите функцию char* findx(const char* s, const char* х) , нахо* дящую первое вхождение С-строки х в строку s." Я решил, что раз уже там тип возвращаемого результат char*, то функция должна возвращать оставшуюся строку. Найти первое вхождение строки могу, но вот вернуть потом исходную строку с даного места не получается.
#include <iostream>
#include "header.h"
using namespace std;
int main() {
char* str_f = { "Hello, what's your name?" };
char* str_s = { "your name?" };
cout << findx(str_f, str_s);
system("pause");
return 0;
}
int findx(const char* s, const char* x) {
for (int i = 0; i < strlen(s); i++) {
if (s[i] == x[0]) {
int k = i;
for (int j = 0; s[k] == x[j]; j++, k++) {
if (j == strlen(x)) return i+1;
}
}
}
return -1;
}
Сделал тип int, чтобы проверить правильного ли ищет первое вхождение строки в подстроку.
int findx(const char* s, const char* x) {
for (size_t i = 0; i < strlen(s); i++) {
if (s[i] == x[0]) {
int k = i;
for (size_t j = 0; s[k] == x[j]; j++, k++) {
if (j == strlen(x) - 1) return i;
}
}
}
return -1;
}
const char* findch(const char* s, const char* x) {
int pos = findx(s, x);
return pos == -1 ? nullptr : s + pos;
}
Вызов в main: cout << findx(str_f, str_s) << endl; cout << findch(str_f, str_s) << endl;
Преобразовываем const char* в char* помощью const_cast<>, но лучше возвращать const char* и не использовать const_cast<>, если не хотим изменять константную С-строку
char* findx(const char* s, const char* x)
{
char* r = nullptr;
int length = strlen(x);
int n = 0;
int occurrence_len = 0;
while (s[n]) {
if (s[n] == *x) { //*x == x[0]
for (int i = 0; i < length; ++i)
if (s[n + i] == x[i]) ++occurrence_len;
if (occurrence_len == length) { //нашли подстроку
r = const_cast<char*>(&s[n]); //отбрасываем const
return r;
}
else
occurrence_len = 0; //сбрасывем счетчик
}
++n;
}
//если ничего не нашли, возвращем целую строку s
r = const_cast<char*>(s);
return r;
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости