Учу С++ по книге Страуструпа, есть такое задание в конце главы : "Напишите функцию 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;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я только начал изучать QtИспользую clion и соответственно cmake
Я бы сделал попроще:
Пользователь оценивает фотографиюAjax Иконка Like изначально серого цвета, после выполнения успешного Ajax-запроса должна стать розового цвета...