Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
21.02.2014, 23:55     Не возвращается вхождение символа в строку #1
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 не кладется рез...никакой. почему так?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2014, 23:55     Не возвращается вхождение символа в строку
Посмотрите здесь:

C++ Из файла ввести слово и найти в нём последнее вхождение заданного символа, если он есть
Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку. C++
Удвоить каждое вхождение символа С в строку S C++
Удвоить каждое вхождение символа в строке C++
Как лучше найти последнее вхождение символа в std::wstring? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
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 не кладется рез...никакой.
переведи
что не кладется?
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
22.02.2014, 00:15  [ТС]     Не возвращается вхождение символа в строку #3
да и так и так писал.
ну, не возвращает вхождение символа в строку, и не записывает NULL если символа там нет
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
22.02.2014, 00:18     Не возвращается вхождение символа в строку #4
Цитата Сообщение от RayPas Посмотреть сообщение
char* a, int b
в a что?
и что передается в b?
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
22.02.2014, 00:19  [ТС]     Не возвращается вхождение символа в строку #5
a - это указатель на строку, которую вводим с клавы, а в b длина строки
и вот вообще задумано, что это функ-я будет проверять введенную строку на наличие символов локально-объявленного маccива , причем в этой строке(введенной с клавы) символы могут быть расположены в любом порядке. Играет роль, что-то типа - допустить недопустить цепочку символов
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
22.02.2014, 00:25     Не возвращается вхождение символа в строку #6
только сейчас заметил
Цитата Сообщение от RayPas Посмотреть сообщение
int i(0);
Цитата Сообщение от RayPas Посмотреть сообщение
} while (i < b);
если b больще нуля цикл то бесконечный i нигде не меняется

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

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

вот еще что сделал, изменил условие if (ptr == NULL) тогда он все время туда заходит, т.е. указатель вообще мертвый и никакую работу не выполняет...
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
22.02.2014, 00:35     Не возвращается вхождение символа в строку #8
Цитата Сообщение от RayPas Посмотреть сообщение
C++
1
if (*ptr == NULL)
интересное условие... может так?
C++
1
if (ptr == NULL)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
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++;       
   };
}
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
22.02.2014, 01:05  [ТС]     Не возвращается вхождение символа в строку #10
ну, я уже исправил чтоб выходил)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
22.02.2014, 01:09     Не возвращается вхождение символа в строку #11
есть еще функция strcspn как раз ищет символы из шаблона
может она тебе подойдет?
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
22.02.2014, 01:12  [ТС]     Не возвращается вхождение символа в строку #12
ValeryS ,а вот ошибку выводит каждый раз,как несовпадает, а как чтоб при первом расхождении одну выдал и все? мол сразу сгенерировать трай эген, ибо нет смысла проверять дальше...подойдет ли в этом случае strcspn?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
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;
}
нехай вызывающая функция разбирается
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
22.02.2014, 01:22  [ТС]     Не возвращается вхождение символа в строку #14
ValeryS, как-то первый вариант понятнее)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
22.02.2014, 01:22     Не возвращается вхождение символа в строку #15
Цитата Сообщение от RayPas Посмотреть сообщение
подойдет ли в этом случае strcspn?
я не знаю твоей задачи
прочитай описание функции например здесь
http://cppstudio.com/post/729/
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
22.02.2014, 01:24  [ТС]     Не возвращается вхождение символа в строку #16
ValeryS, да в том то и дело, не хочу все выдавать, надо самому пытаться)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2014, 07:40     Не возвращается вхождение символа в строку
Еще ссылки по теме:

C++ Строка: Выделить вхождение отдельного символа их количество и хранить их вместе со счётчиком в линейном однонаправленом списке.
C++ Дан символ C и строка S .Удвоить каждое вхождение символа С в строку S
C++ Первое вхождение символа в строку. С++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
22.02.2014, 07:40     Не возвращается вхождение символа в строку #17
http://www.opennet.ru/docs/RUS/libc/libc-4.html
4.16 strcspn - считает знаки, не входящие строку

size_t strcspn(const char *s1, const char *s2);

Эта функция считает длину начальной части стpоки, указанной s1, котоpая состоит из знаков, не входящих в стpокy, указаннyю s2 (исключая завершающий знак NULL).
strcspn возвращает длину найденной подстроки.
Стандарт ANSI требует наличия функции strcspn.
strcspn не требует никаких процедур ОС.
следовательно
вся функция может выглядеть так
C++
1
2
3
4
5
6
void Str :: Control(char* a)
 {
  char masHex[] ="0123456789ABCDEFabcdef";
     if( strcspn(a,masHex) !=0)
      cout << "Error!" << endl;
}
Yandex
Объявления
22.02.2014, 07:40     Не возвращается вхождение символа в строку
Ответ Создать тему
Опции темы

Текущее время: 16:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru