Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
#1

Не возвращается вхождение символа в строку - C++

21.02.2014, 23:55. Просмотров 414. Ответов 16
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
void Str :: Control(char* a, int b) {
    int i(0);
    char masHex[] = {'0','1', '2', '3' , '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', '\0'};
    do {
    char* ptr = strstr(masHex, a);
    if (*ptr == NULL)
        {cout << "Error!" << endl; a++;}
    else a++;       
    } while (i < b);
}
в ptr не кладется рез...никакой. почему так?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2014, 23:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не возвращается вхождение символа в строку (C++):

Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке - C++
Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить последнее вхождение символа “р” в строке и вывести строку, начиная с...

Первое вхождение символа в строку. С++ - C++
Для данного рядка оставить только первые вхождения каждого символа в ряд, и вывести результаты на экран. Заранее спасибо за помощь ))

Удвоить каждое вхождение символа С в строку S - C++
Дана строка S и символ С. Удвоить каждое вхождение символа С в строку S.

Удвоить каждое вхождение символа C в строку S - C++
Дана строка S и символ C. Удвоить каждое вхождение символа C в строку S. Помогите плиз написать программу с помощью функций.

Найти вхождение одного символа std::string в строку char* - C++
Каким образом можно найти вхождение одного символа std::string в строку char*? Наоборот то понятное дело как, но нужно именно так

Дан символ C и строка S .Удвоить каждое вхождение символа С в строку S - C++
Обработка символьных массивов с помощью указателей: Дан символ C и строка S .Удвоить каждое вхождение символа С в строку S Для...

16
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
22.02.2014, 00:08 #2
Цитата Сообщение от RayPas Посмотреть сообщение
char masHex[] = {'0','1', '2', '3' , '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', '\0'}
а так не проще было написать
C++
1
char masHex[] ="0123456789ABCDEF";
Цитата Сообщение от RayPas Посмотреть сообщение
в ptr не кладется рез...никакой.
переведи
что не кладется?
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
22.02.2014, 00:15  [ТС] #3
да и так и так писал.
ну, не возвращает вхождение символа в строку, и не записывает NULL если символа там нет
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
22.02.2014, 00:18 #4
Цитата Сообщение от RayPas Посмотреть сообщение
char* a, int b
в a что?
и что передается в b?
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
22.02.2014, 00:19  [ТС] #5
a - это указатель на строку, которую вводим с клавы, а в b длина строки
и вот вообще задумано, что это функ-я будет проверять введенную строку на наличие символов локально-объявленного маccива , причем в этой строке(введенной с клавы) символы могут быть расположены в любом порядке. Играет роль, что-то типа - допустить недопустить цепочку символов
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
22.02.2014, 00:25 #6
только сейчас заметил
Цитата Сообщение от RayPas Посмотреть сообщение
int i(0);
Цитата Сообщение от RayPas Посмотреть сообщение
} while (i < b);
если b больще нуля цикл то бесконечный i нигде не меняется

Добавлено через 3 минуты
Цитата Сообщение от RayPas Посмотреть сообщение
a - это указатель на строку, которую вводим с клавы,
и видать в ней мы должны найти символы
так?
но ищешь то ты в masHex строку a

короче напиши строку и что должно получится
я пока в твоей логике разобраться не могу
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
22.02.2014, 00:28  [ТС] #7
так и должно быть, ищу a в локальном массива
пример:
вводят = 011221FD
ptr находит все эти элементы в masHex и выходит из функции, мол ошибок нет - допущена.

вот еще что сделал, изменил условие if (ptr == NULL) тогда он все время туда заходит, т.е. указатель вообще мертвый и никакую работу не выполняет...
0
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
22.02.2014, 00:35 #8
Цитата Сообщение от RayPas Посмотреть сообщение
C++
1
if (*ptr == NULL)
интересное условие... может так?
C++
1
if (ptr == NULL)
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
22.02.2014, 01:03 #9
Цитата Сообщение от RayPas Посмотреть сообщение
вводят = 011221FD
а теперь
найди в строке 0123456789ABCDEF подстроку 011221FD
тебе посимвольно нужно искать
например так (но учти это мысли вслух)
создать временную строку из одного символа
C++
1
2
3
4
5
6
7
8
9
10
11
void Str :: Control(char* a, int b) {
char masHex[] = {'0','1', '2', '3' , '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', '\0'};
char tmp[2]={0,0}
  while(*a) {
    tmp[0]=*a;  
    char* ptr = strstr(masHex, tmp);
     if ( ptr == NULL)
        cout << "Error!" << endl;
     a++;       
   };
}
Цитата Сообщение от RayPas Посмотреть сообщение
и выходит из функции,
не выходит цикл у тебя бесконечный

Добавлено через 24 минуты
вспомнил про другую функцию
strrchr()
вот решение с ней
C++
1
2
3
4
5
6
7
8
9
10
void Str :: Control(char* a)
 {
char masHex[] ="0123456789ABCDEFabcdef";
   while(*a) {
    char* ptr = strrchr(masHex, *a);
     if ( ptr == NULL)
        cout << "Error!" << endl;
     a++;       
   };
}
1
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
22.02.2014, 01:05  [ТС] #10
ну, я уже исправил чтоб выходил)
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
22.02.2014, 01:09 #11
есть еще функция strcspn как раз ищет символы из шаблона
может она тебе подойдет?
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
22.02.2014, 01:12  [ТС] #12
ValeryS ,а вот ошибку выводит каждый раз,как несовпадает, а как чтоб при первом расхождении одну выдал и все? мол сразу сгенерировать трай эген, ибо нет смысла проверять дальше...подойдет ли в этом случае strcspn?
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
22.02.2014, 01:19 #13
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от RayPas Посмотреть сообщение
ValeryS ,а вот ошибку выводит каждый раз,
ну дак это я у тебя взял
если не нужно делаем так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void Str :: Control(char* a)
 {
char masHex[] ="0123456789ABCDEFabcdef";
   while(*a) {
    char* ptr = strrchr(masHex, *a);
     if ( ptr == NULL)
         {
        cout << "Error!" << endl;
         return;
          }
     a++;       
   };
}
а еще лучше так
C++
1
2
3
4
5
6
7
8
9
10
11
bool Str :: Control(char* a)
 {
char masHex[] ="0123456789ABCDEFabcdef";
   while(*a) {
    char* ptr = strrchr(masHex, *a);
     if ( ptr == NULL)
        return false;
     a++;       
   };
return true;
}
нехай вызывающая функция разбирается
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
22.02.2014, 01:22  [ТС] #14
ValeryS, как-то первый вариант понятнее)
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
22.02.2014, 01:22 #15
Цитата Сообщение от RayPas Посмотреть сообщение
подойдет ли в этом случае strcspn?
я не знаю твоей задачи
прочитай описание функции например здесь
http://cppstudio.com/post/729/
1
22.02.2014, 01:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2014, 01:22
Привет! Вот еще темы с ответами:

Удвоить каждое вхождение символа в строке - C++
Дана строка s и c символ . Удвойте каждое вхождение символа c в строке s подскажите пожалуйста как решить. Добавлено через 10 минут ...

Найти первое вхождение символа в строке - C++
Задана числовая строка с разделительным знаком (&amp;) где то посередине. Мне надо получить числа в строке до этого знака, путём нахождения его...

Как лучше найти последнее вхождение символа в std::wstring? - C++
Как лучше найти последнее вхождение символа в std::wstring?

Функция удаляющая первое и последнее вхождение в строке заданного символа - C++
Функция удаляет первое и последнее вхождение в строке заданного символа.


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

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

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