Написать функцию, которая ищет в заданной строке последнее вхождение заданного символа - C (СИ)
Формулировка задачи:
программа не работает помогите пожалуйста
Вот сама задача:
Написать функцию, которая ищет в заданной строке последнее вхождение заданного символа (char *strrchr(char *s, char c).
Мое решение:
#include<stdio.h>
#include<conio.h>
char *strrchr(char*s,char c)
{char *rs;
while(*s!='\0')
{if(*s==c)
rs=s ;s++;
}
return rs;
}
main()
{char str[80],c;
puts("vvedite stroku u simvol");
gets(str);
scanf("%c",&c);
{puts(strrchr(str,c));
puts(str);
}}Решение задачи: «Написать функцию, которая ищет в заданной строке последнее вхождение заданного символа»
textual
Листинг программы
#include <stdio.h>
char *strrchr(const char *s, int c){
const char *p;
if ( !s || !*s || !c )
return NULL;
for ( p = s; *p; p++ )
;
for ( p -= 1; p >= s; p-- )
if ( *p == (unsigned char)c )
return (char*)p;
return NULL;
}
int main(void){
char buf[BUFSIZ], *p;
int c;
while ( 1 ){
printf("String: ");
if ( !fgets(buf, BUFSIZ, stdin) )
return 1;
if ( *buf == '\n' )
break;
if ( p = strrchr(buf, '\n') )
*p = '\0';
printf("Char: ");
c = getchar();
getchar();
if ( p = strrchr(buf, c) )
printf("Tail of string: %s\n", p);
else
printf("Can't find %c in string %s\n", (unsigned char)c, buf);
}
return 0;
}
Объяснение кода листинга программы
- В функции strrchr ищется последнее вхождение заданного символа в строке.
- Если строка пустая или пустая строка, функция возвращает NULL.
- В цикле просматривается каждый символ строки.
- Если найден заданный символ, функция возвращает указатель на этот символ в строке.
- Если заданный символ не найден, функция возвращает NULL.
- В функции main запрашивается строка и символ для поиска.
- Если строка пустая, выводится сообщение об ошибке и программа завершается.
- Если символ для поиска пустой, выводится сообщение об ошибке и программа завершается.
- Если заданный символ найден в строке, выводится сообщение об этом.
- Если заданный символ не найден в строке, выводится сообщение об этом.
- Цикл продолжается до тех пор, пока не будет введен символ новой строки.
- Введенная строка всегда завершается символом новой строки.
- Функция fgets считывает строку из стандартного ввода и записывает ее в буфер.
- Если ввод пустой, функция fgets возвращает NULL.
- Если введенный символ является символом новой строки, программа завершается.
- Если введенный символ является символом возврата каретки, программа завершается.
- Если введенный символ является символом перевода строки, программа завершается.
- Если введенный символ является символом табуляции, программа завершается.
- Если введенный символ является символом пробела, программа завершается.
- Если введенный символ является символом звездочки, программа завершается.