+ Ответить в теме
Показано с 1 по 3 из 3.

Тема: Строковый анализатор

  1. #1
    dummy
    coder
    Lotles is on a distinguished road
    Регистрация
    03.07.2010
    Сообщений
    12

    Строковый анализатор

    Исправьте код, работать должен так:

    Если введешь так:
    11/23/34, то должен получить
    11
    23
    34

    Если введешь так:
    11.23.34, то должен получить
    11
    23
    34

    Если введешь так:
    11.23/34, то должен получить
    11
    23
    34

    Код cpp:
              #include "stdafx.h"
          #include <conio.h>
          using namespace std;
          class StringParser {
          private:
             int pos;
             char* input_str;
             char* delimiters;
          public:
             int more()   {
             return input_str[pos]!='\0';
             }
             StringParser(char* inp, char* delim){
             input_str = inp; delimiters = delim; pos = 0;
                 }
             char* get(){
             int j = 0;
             char* new_str;
             new_str = new char[100];

             while (! strchr(delimiters, input_str[pos])){
                 new_str[j] = input_str[pos];
                 pos++;
                 j++;
             }

             while (strchr(delimiters, input_str[pos]))
             pos++;


             new_str[j]='\0';
             return new_str;
             }
          };
          int main() {
             char input_str[100];
             char* ch;      
             cout << "Enter input line: ";
             cin.getline(input_str, 99);
             StringParser parser(input_str, "/,");
             while (parser.more()){
             ch = parser.get();
             cout << ch << endl;
             delete[]ch;
             }
             return 0;
          }

    Этот код выдает всякий мусор, подает звуковые сигналы, подскажите в чем причина !
    Последний раз редактировалось Lotles; 31.07.2010 в 18:02. Причина: Используй [code=cpp][/code]

  2. #2
    dummy Ilyxa is on a distinguished road
    Регистрация
    28.07.2010
    Сообщений
    6

    Re: Строковый анализатор

    покури библиотеку boost, шаблон tokenizer. Твой пример в 3 строчки уместится))
    Меня, например, всегда строки и регекспы в c++ убивали (в конце концов напишешь, но времени уйдет туева гора), плюнул я на это дело, использую готовые решения. Чего и всем советую)

  3. #3
    dummy Ilyxa is on a distinguished road
    Регистрация
    28.07.2010
    Сообщений
    6

    Re: Строковый анализатор

    // в общем, почитай про strchr(...) )) она возвращает указатель на первое вхождение символа в строке
    // собственно код:

    Код cpp:
    #include <cstdlib>
    #include <iostream>

    using namespace std;
    class StringParser {
          private:
             int pos;
             char* input_str;
             char* delimiters;
          public:
                 
         
          int more()   {
              //cout << "MORE: " << pos << " " << *(input_str) << endl;
              return *(input_str)!=0;
          }
             
          StringParser(char* inp, char* delim){
             input_str = inp; delimiters = delim; pos = 0;
          }
                 
          char* get(){
             int j = 0;
             char* new_str;
             new_str = new char[100];
             char* del_pointer = delimiters;

             do {
              ++pos;
              del_pointer=delimiters;
              while(*(del_pointer)) {
              if(*(input_str)==*(del_pointer) ||  *(input_str)=='\0') {            
                  ++input_str;              
                  return new_str;                      
              }  
              del_pointer++;
              }
             if(j<100)  *(new_str+j)=*(input_str)   ;
              ++j;  
              ++input_str;
             } while (*(input_str));
          }
    };

    int main(int argc, char *argv[])
    {
        //system("PAUSE");
        char input_str[100];
        char* ch;      
        char* delimiters = "/,;_+-*";  
        cout << "Enter input line: ";
        cin.getline(input_str, sizeof(input_str)-1);
        strcat(input_str, "/");                  
        StringParser parser(input_str, delimiters);
        do{
            ch = parser.get();
            cout << ch << endl;
            delete[] ch;
        } while (parser.more());
        cin.get();
        return EXIT_SUCCESS;
    }
    // комменты писать, извини, лень
    // проверять на выхождение за границу буфера тоже...
    Последний раз редактировалось Ilyxa; 03.08.2010 в 10:51.

+ Ответить в теме

Похожие темы

  1. Модульный анализатор трафика за вознаграждение
    By kopchenkovpierre in forum Решите мне задачку
    Replies: 0
    Последнее сообщение: 09.05.2010, 01:59
  2. Строковый массив
    By d0ki in forum задачи на Паскале и Delphi
    Replies: 2
    Последнее сообщение: 27.12.2009, 22:50
  3. строковый тип.строки
    By natasha163163 in forum задачи на Паскале и Delphi
    Replies: 1
    Последнее сообщение: 04.10.2009, 13:06
  4. Анализатор для логических формул
    By Toretto in forum Решите мне задачку
    Replies: 3
    Последнее сообщение: 02.12.2008, 13:48
  5. Replies: 1
    Последнее сообщение: 07.11.2006, 02:07

Ваши права в разделе

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения