Поиск последнего появления символа char в строке с использованием указателя (язык C)
Функция находит последнее вхождение ch в строке, на которую указывает s. Он возвращает указатель на символ или нулевой указатель, если ch не существует в строке. Я пытаюсь написать функцию без использования функций библиотеки строк.
Это то, что я получил до сих пор, мне кажется это правильным, но я не могу получить результирующую строку.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <math.h>
char *strrchr2(char *s, char ch);
int main()
{
char str1[100];
char char1;
char result_str[100];
printf("\nEnter a string: ");
gets(str1);
fflush(stdin);
printf("Enter the target char in the string: ");
scanf("%c", &char1);
char * result_str = strrchr2(str1, char1);
printf("Resultant string = %s", result_str);
char * strrchr2(char *s, char ch)
{
int count = 0, offset = 0;
while (*(s + count) != '\0')
{
if (*(s + count) == ch)
offset = count;
count++;
}
return *(s + offset);
}
Ожидаемый результат:
Enter a string: abcdefdfdfghh
Enter the target char in the string: f
Resultant string: fghh
3 ответа
return *(s + offset);
Вы возвращаете сюда персонажа в s[offset]
, Вы должны вернуть указатель на это место, которое (s + offset)
return (s + offset);
const char* strchr_last (const char* s, char ch)
{
const char* found_at = NULL;
while(*s != '\0')
{
if(*s == ch)
{
found_at = s;
}
s++;
}
return found_at;
}
Вы можете сделать то же самое, что и при нахождении первого вхождения символа в строке, с небольшим изменением: сканирование строки от конца до начала.
char* strrchr2(char *s, char ch)
{
char* p = s;
int found_ch = 0;
//finding the length of the string
while (*p != '\0')
{
p++;
}
//p now points to the last cell in the string
//finding the first occurrence of ch in s from the end:
while (p >= s && !found_ch)
{
if (*p == ch)
{
found_ch = 1;
}
else
{
p--;
}
}
if (!found_ch)
{
p = 0;
}
return p;
}