#include <iostream>
using namespace std;
char *get_substr(char *sub, char *str);
int main() {
setlocale(LC_ALL, "RUS");
char * substr;
substr = get_substr("один", "два три четыре");
cout << "Подстрока найдена: " << substr;
return 0;
}
char *get_substr(char *sub, char *str) {
int t;
char *p, *p2, *start;
for(t = 0; str[t]; t++) {
p = &str[t];
start = p;
p2 = sub;
while (*p2 && *p2 == *p) {
p++;
p2++;
}
if (!*p2)
return start;
}
return 0;
}
get_substr("один", "два три четыре")
, ты в функцию передаешь два строковых литерала, тип которых - const char[ N ]
, где N
- это длина строки литерала включая терминальный символ '\0'
.const char*
в char*
недопустимо, поэтому компилятор и пишет тебе ошибку.char*
вообще не нужен, т.к. полностью все операции у тебя не приводят к изменению состояния строки. Заменить char*
на const char*
будет и логичнее, и понимаемость кода тоже улучшит. #include <stdio.h>
int index(char[], char[]);
int main()
{
char* str = "foo bar baz";
char* str2 = "barz";
if(index(str, str2) != -1)
printf("found");
else
printf("not found");
return 0;
}
int index(char s[], char t[])
{
int i, j, k;
for (i = 0; s[i] != '\0'; i++)
{
for (j = i, k = 0; t[k] != '\0' && s[k] == t[k]; j++, k++)
;
if(t[k] == '\0')
return i;
}
return -1;
}