Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
alexs47
0 / 0 / 1
Регистрация: 18.04.2014
Сообщений: 25
#1

Написать функцию, которая ищет в строке str указанный символ, и возвращает указатель на его первое вхождение - C (СИ)

08.06.2014, 13:40. Просмотров 937. Ответов 6
Метки нет (Все метки)

Помогите написать функцию
char* findChar(const char *str, char c);
которая ищет в строке str указанный символ c и возвращает указатель
на его первое вхождение. В случае если символ не найден, должен быть
возвращён указатель на конец строки. Функция не должна выходить за
пределы строки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2014, 13:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Написать функцию, которая ищет в строке str указанный символ, и возвращает указатель на его первое вхождение (C (СИ)):

Написать функцию, которая ищет в заданной строке первое вхождение заданного символа
Помогите пожалуйста с указателями... Написать функцию, которая ищет в заданной...

Написать функцию, которая ищет в заданной строке последнее вхождение заданного символа
программа не работает помогите пожалуйста Вот сама задача: Написать функцию,...

Написать функцию, которая ищет в строке s1 любой символ из строки s2
Написать функцию, которая ищет в строке s1 любой символ из строки s2 (char...

Написать функцию, которая ищет символ одной строки, отсутствующий в другой
Написать функцию, которая ищет символ одной строки, отсутствующий в другой...

Написать и протестировать функцию, которая возвращает указатель на новый прямоугольник
Определить структуру, описывает прямоугольник со сторонами, параллельными осям...

Написать функцию primer(str1, str2) удаляющую из строки str1 последнее вхождение строки str2. Функция возвращает указатель str1
помогите пожалуйста

6
schdub
Эксперт С++
3016 / 1361 / 415
Регистрация: 19.01.2009
Сообщений: 3,615
Завершенные тесты: 1
08.06.2014, 15:59 #2
Лучший ответ Сообщение было отмечено alexs47 как решение

Решение

alexs47, вот:
C
1
2
3
4
char * findChar(const char * str, char c) {
    for (; *str && *str != c; ++str);
    return (char*) str;
}
1
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
08.06.2014, 16:37 #3
Лучший ответ Сообщение было отмечено alexs47 как решение

Решение

C
1
2
3
4
5
6
char * findChar(const char *str, char c)
{ char *s =strchr(str,c);
if (!s) s= strchr(str,NULL);    //если символ не найден, ищем хвост строки,
// The terminating null character is considered to be part of the string.
return s;
};
1
schdub
Эксперт С++
3016 / 1361 / 415
Регистрация: 19.01.2009
Сообщений: 3,615
Завершенные тесты: 1
08.06.2014, 17:25 #4
Лучший ответ Сообщение было отмечено alexs47 как решение

Решение

Charles Kludge, думаю, вместо NULL лучше передавать '\0', т.к. под gcc при компиляции вот такой WARN:
Код
warning: passing argument 2 of ‘strchr’ makes integer from pointer without a cast [enabled by default]
  if (!s) s= strchr(str,NULL);    //если символ не найден, ищем хвост строки,
  ^
/usr/include/string.h:235:14: note: expected ‘int’ but argument is of type ‘void *’
 extern char *strchr (__const char *__s, int __c)
1
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
08.06.2014, 17:47 #5
Лучший ответ Сообщение было отмечено alexs47 как решение

Решение

Цитата Сообщение от schdub Посмотреть сообщение
под gcc при компиляции вот такой WARN:
Неудивительно. NULL не может быть void *. Смотрим в string.h от Waterloo:
C
1
2
3
4
5
6
7
#ifndef NULL
#if defined( __SMALL__ ) || defined( __MEDIUM__ ) || defined( __386__ ) || defined( __AXP__ ) || defined( __PPC__ )
#define                         NULL                    0
#else
#define                         NULL                    0L
#endif
#endif
1
schdub
Эксперт С++
3016 / 1361 / 415
Регистрация: 19.01.2009
Сообщений: 3,615
Завершенные тесты: 1
09.06.2014, 00:15 #6
Лучший ответ Сообщение было отмечено alexs47 как решение

Решение

Цитата Сообщение от Charles Kludge Посмотреть сообщение
NULL не может быть void *. Смотрим в string.h от Waterloo
Честно говоря не знаю, что такое Waterloo, но по стандарту "implementation-defined null pointer constant" должен быть определн в stddef.h (С99 7.17), например, вот так он определяется в стандартной библиотеке моего компилятора (gcc 4.8.1):

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//...
#if defined (_STDDEF_H) || defined (__need_NULL)
#undef NULL     /* in case <stdio.h> has defined it. */
#ifdef __GNUG__
#define NULL __null
#else   /* G++ */
#ifndef __cplusplus
#define NULL ((void *)0)
#else   /* C++ */
#define NULL 0
#endif  /* C++ */
#endif  /* G++ */
#endif  /* NULL not defined and <stddef.h> or need NULL.  */
#undef  __need_NULL
 
#ifdef _STDDEF_H
//...
вот так в MSVC:
C
1
2
3
4
5
6
7
8
9
10
//...
/* Define NULL pointer value */
#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif
//...
Не пытаюсь разжечь холивар, просто действительно не понимаю, как по семантике в массиве символов можно искать NULL, а не '\0'?
1
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
09.06.2014, 00:37 #7
Лучший ответ Сообщение было отмечено alexs47 как решение

Решение

Цитата Сообщение от schdub Посмотреть сообщение
не знаю, что такое Waterloo
Waterloo Compilers aka Watcom aka OpenWatcom.
Цитата Сообщение от schdub Посмотреть сообщение
действительно не понимаю, как по семантике в массиве символов можно искать NULL, а не '\0'?
Дело в архитектуре - в любом случае в стек при вызове strchr() будет положен 0L, так что в данном случае трактование NULL как байта считаю уместным и более наглядным.
И да, в stddef.h у меня такое же, как и выше я писал, определение NULL.
1
09.06.2014, 00:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2014, 00:37
Привет! Вот еще темы с решениями:

Указатель на функцию, которая возвращает массив
Данная программа делает следующее: 1) просит ввести пользователя целое число в...

Разработать функцию, которая возвращает указатель на последний элемент целочисленного массива
Указание: Разработать подпрограмму в виде функции. Привести пример вызова...

Написать функцию Procent, которая возвращает процент от числа
Написать функцию Procent, которая возвращает процент от числа.Процент и число...

В каждой строке для всех слов, которые встречаются в строке больше одного раза, оставить только первое вхождение
Народ, помогите Нужно в каждой строке для всех слов, которые встречаются в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru