как задать строку?
От: Аноним  
Дата: 06.06.08 10:06
Оценка:
например...
name[strlen(name)] = 'Vasya*'
Что-бы после васи могло быть все что угодно?!
Re: как задать строку?
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 06.06.08 10:22
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>например...

А>name[strlen(name)] = 'Vasya*'
А>Что-бы после васи могло быть все что угодно?!

Я вас не понимаю..
Re[2]: как задать строку?
От: Аноним  
Дата: 06.06.08 10:48
Оценка:
Здравствуйте, php-coder, Вы писали:

PC>Здравствуйте, Аноним, Вы писали:


А>>например...

А>>name[strlen(name)] = 'Vasya*'
А>>Что-бы после васи могло быть все что угодно?!

PC>Я вас не понимаю..

Ну я сравниваю две строки, при этом в одной VasyaPupkin VasyaPetrov, а в другой нужно задать так, что-бы найти все вхождения после Vasya...
Re[3]: как задать строку?
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 06.06.08 10:50
Оценка:
Здравствуйте, Аноним, Вы писали:

PC>>Я вас не понимаю..

А>Ну я сравниваю две строки, при этом в одной VasyaPupkin VasyaPetrov, а в другой нужно задать так, что-бы найти все вхождения после Vasya...

Если я правильно вас понял, что вам нужны регулярные выражения. (Тогда смотрите в сторону PCRE, boost-regex и пр.)
Re: как задать строку?
От: alexsy Россия  
Дата: 06.06.08 11:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>например...

А>name[strlen(name)] = 'Vasya*'
А>Что-бы после васи могло быть все что угодно?!
а если не хочется загонятся на boostnj то можно типа тае
char* name1 = "VasyaPupkin";
char* name2 = "VasyaPorkin";
if( strncpm( name1,name2, strlen( "Vasya" ) ) )}{}
else {}
;
Re[2]: как задать строку?
От: Were  
Дата: 06.06.08 11:48
Оценка:
Здравствуйте, alexsy, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>например...

А>>name[strlen(name)] = 'Vasya*'
А>>Что-бы после васи могло быть все что угодно?!
A>а если не хочется загонятся на boostnj то можно типа тае
A>
A>char* name1 = "VasyaPupkin";
A>char* name2 = "VasyaPorkin";
A>if( strncpm( name1,name2, strlen( "Vasya" ) ) )}{}
A>else {}
A>


Только так:

if( 0 == strncmp( name1 ,name2, strlen( "Vasya" ))) {}
else {}
Re[3]: как задать строку?
От: Аноним  
Дата: 06.06.08 13:17
Оценка:
ОК, а если у меня не вася, то как соблюсти правильный тип данных?

char header[]={"\xFF\xD8\xFF", "\xFF\xD9", "\x42\x4D"}
Re[4]: как задать строку?
От: EyeOfHell Россия eyeofhell.habr.ru
Дата: 06.06.08 14:31
Оценка:

ОК, а если у меня не вася, то как соблюсти правильный тип данных?


Что такое "правильный тип данных"? Где его надо соблюсти?

char header[]={"\xFF\xD8\xFF", "\xFF\xD9", "\x42\x4D"}


Если это какой-то пример, то он не откомпилируется. Справа — набор строк, слева — массив. Не влезет (с).

Наверное Вы имели в виду что-то из этого —

char header[]={"\xFF\xD8\xFF\xFF\xD9\x42\x4D"};
char* header[]={"\xFF\xD8\xFF", "\xFF\xD9", "\x42\x4D"};


что именно?
Re[3]: как задать строку?
От: Кодт Россия  
Дата: 06.06.08 19:53
Оценка: +2
Здравствуйте, Аноним, Вы писали:

А>Ну я сравниваю две строки, при этом в одной VasyaPupkin VasyaPetrov, а в другой нужно задать так, что-бы найти все вхождения после Vasya...


Пожалуйста, избавь себя (и нас тоже) от неверного употребления слов.
Это — не сравнение строк.
И как я понимаю, второй строки в постановке задачи вообще нет.

У тебя — задача поиска вхождений подстроки в строке.
// вспомогательная функция
char const* find_str(char const* text, char const* tag)
{
  char const* found = strstr(text,tag);
  if(!found) found = text+strlen(text);
  return found;
}


// допустим, функция, которую нужно вызывать
void process(char const* token, size_t token_length);

// где ищем
char const* const text = "MishaIvanov VasyaPupkin VasyaPetrov PetyaSidorov";
// что ищем
char const* const tag = "Vasya";
size_t const taglen = strlen(tag);

char const* here = find_str(text, tag);
while(*here)
{
  char const* there = find_str(here + taglen, tag);
  process(here,there-here);
  here = there;
}

Будут вызваны функции process() для диапазонов "VasyaPupkin ", "VasyaPetrov PetyaSidorov".

Либо тебе нужно сперва (мысленно) разбить строку на подстроки — скажем, по пробелу — и каждую подстроку проверить.
Ничего сложного:
char const* const separator = " ";
char const* here = text + strspn(text, separator); // пропускаем все разделители
while(*here)
{
  size_t token_length = strcspn(here, separator); // считаем до первого разделителя
  if(strncmp(here, tag, token_length)==0) // фильтр
    process(here, token_length);
  here += token_length;
  here += strspn(here, separator);
}


Если прибегнуть к бусту, то задачи разбивки строки на токены и прочее станут выглядеть попроще.
А если не прибегать, то голый сишный код тоже работать будет.
Перекуём баги на фичи!
Re[4]: как задать строку?
От: Аноним  
Дата: 08.06.08 12:07
Оценка:
>У тебя — задача поиска вхождений подстроки в строке.
Да, что-то вроде того.
Вот еще на ум пришло, если в каждом патерне сравнивать первый и последний символ? Вопрос в том, как быстрее всего узнать последний символ? Из сайза?
Re[5]: как задать строку?
От: Кодт Россия  
Дата: 09.06.08 07:41
Оценка:
Здравствуйте, <Аноним>, Вы писали:

>>У тебя — задача поиска вхождений подстроки в строке.

А>Да, что-то вроде того.
А>Вот еще на ум пришло, если в каждом патерне сравнивать первый и последний символ? Вопрос в том, как быстрее всего узнать последний символ? Из сайза?

Перед тем, как делать "быстрее всего", нужно сформулировать точно задание. Иначе будет быстро и неправильно, и мы ещё поиграем в угадайки — что именно неправильно.
Так что опиши задачу. И желательно, реальную задачу, а не её трансформацию в термины васи-пупкина.
Что за поток текста, что за формат, какие фрагменты нужно вытаскивать...

А уже потом прицепим к нему алгоритмы быстрого поиска.
Кандидатами в алгоритмы являются Кнута-Морриса-Пратта и Бойера-Мура ("узнать последний символ из сайза" — это топорно-велосипедная вариация БМ).
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.