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

Своя реализация strtok - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проблемы с много-файловыми объявлениями http://www.cyberforum.ru/cpp-beginners/thread936214.html
Добрый день! У меня возникла небольшая проблема после того как я стал изучать Win API, мне стало неудобно хранить весь код в одном файле main.cpp И вот я решил разбить мой проект на несколько...
C++ Указатель на виртуальную функцию #include <stdio.h> #include <conio.h> class A { public: virtual void f(){printf("a\n");}; }; class B:public A http://www.cyberforum.ru/cpp-beginners/thread936191.html
C++ ostream& output
Что это за параметр такой, - ostream& output? ostream& operator<< (ostream& output, const Array<T>& theArray) { for (int i = 0; i<theArray.GetSize(); i++) output << " " << theArray << endl;...
C++ Зачем false?
void IntFillFunction(Array<int>& theArray) { bool Stop = false; int offset, value; while (!Stop) { cout << "Enter an offset (0-9) "; cout << "and a value. (-1 to stop): " ; cin >>...
C++ Указатель, как массив http://www.cyberforum.ru/cpp-beginners/thread936181.html
Объясните, пожалуйста, каким образом в 10-ой строке указатель pType ведет себя как массив? template <class T> // declare the template and the parameter class Array // the class being...
C++ ReadProcessMemory ReadProcessMemory (fProcess.__HandleProcess, (PBYTE*)(fProcess.__dwordClient + Player_Base), &CLocalPlayer, sizeof(DWORD), 0); Объясните пожалуйста эту строку подробнее

Показать сообщение отдельно
taimag
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 31

Своя реализация strtok - C++

10.08.2013, 16:49. Просмотров 1540. Ответов 3
Метки (Все метки)

Здравсвуте. Пробовал делать поиск, но почему-то все время просто выдает темы где пишет что такая функция есть. Моя же задача - не используя никаких библиотек и т.д. написать свою реализацию strtok. Я могу найти отдельные слова (это очень просто) могу даже что бы каждый раз продолжать со следующего места, функция ищет начало слова и его длинну, но вот чего не могу - это скопировать слово из введенной строки. Как мне сделать так, что бы функция возвращала строку со словом и \0 в конце?

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int mString::mStringTokens(const char *source, const char *separator)
{
  static const char *lastIterator;
  if (source != 0) {
    lastIterator = source;
  }
  if (*lastIterator == 0) {
    return 0;
  }
  const char *wordBegin = lastIterator;
  const char *separatorBegin = separator;
 
  while (*wordBegin != 0) {
    while (*separatorBegin != 0) {
      if (*wordBegin == *separatorBegin) {
        int ret = wordBegin - lastIterator;
        lastIterator = wordBegin + 1;
        return ret;
      }
      ++separatorBegin;
    }
    separatorBegin = separator;
    ++wordBegin;
  }
  if (*wordBegin == 0) {
    return wordBegin - lastIterator;
  }
}


в данной реализации возвращается длинна слова. Мне нужно что бы функция была не int mString::mStringTokens(const char *source, const char *separator), а const char *mString::mStringTokens(const char *source, const char *separator)

Добавлено через 29 минут
В общем решил проблему вот так:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const char *mString::mStringTokens(const char *source, const char *separator)
{
  static char *word = 0;
  static const char *lastIterator;
  if (source != 0) {
    lastIterator = source;
  }
  if (*lastIterator == 0) {
    free(word);
    return 0;
  }
  const char *wordBegin = lastIterator;
  const char *separatorBegin = separator;
 
  while (*wordBegin != 0) {
    while (*separatorBegin != 0) {
      if (*wordBegin == *separatorBegin) {
        int ret = wordBegin - lastIterator;
        free(word);
        word = static_cast<char*>(malloc(ret * sizeof(char)));
        mString::mStringCopy(lastIterator, word, ret);
        lastIterator = wordBegin + 1;
        return word;
      }
      ++separatorBegin;
    }
    separatorBegin = separator;
    ++wordBegin;
  }
  if (*wordBegin == 0) {
    //return wordBegin - lastIterator;
    free(word);
    return lastIterator;
  }
}


Может кто знает реализацию по-лучше? Просто не думаю то это хорошая идея - использовать выделение памяти каждый раз.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru