Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2010, 16:55   #1
Lotles
Пользователь
 
Регистрация: 02.10.2010
Сообщений: 86
По умолчанию Строковый анализатор

Hi all
Почему код выдает "мусор"
Должен работать так:
Например пишешь 12/23/34
Должен выдать
12
23
34
Код:
#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++;
                 }
                 new_str[j]='\0';
                 while (strchr(delimiters, input_str[pos]))
         pos++;
                 return new_str;
         }
      };
      int main() {
         char input_str[100];
         char* ch;      
         cout << "Enter input line: ";
         cin.getline(input_str, 99);
         int len=strlen(input_str);
         input_str[len+1]='\0';
         StringParser parser(input_str, "/,");
                 while (parser.more()){
                 ch = parser.get();
         cout << ch << endl;
                 delete[]ch;
                 }
         return 0;
      }
Lotles вне форума Ответить с цитированием
Старый 03.10.2010, 17:06   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

извините, но то, что вы написали - говнокод, ИМХО

стрингпарсер класс ну вообще не нужен наверно, просто описать функцию с входным параметром строка, второй параметр - указатель или ссылка на структуру с тремя числами

парсить тут плевое дело, длину строки можем узнать? можем, функция для этого strlen(...). Идем по строке с самого начала и каждый знак сравниваем с эталоном (эталон у нас - знак '/'), если он встречается, запоминаем индекс знака в строке, и копируем из строки с первого символа до запомненного и преобразовываем в число, ну и так далее

вот и все. Ничего сложного, там буквально будет 12 строк кода (+- 3)
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 03.10.2010, 17:22   #3
Lotles
Пользователь
 
Регистрация: 02.10.2010
Сообщений: 86
По умолчанию

Сделать можно по всякому, просто мне нужен этот код , потому что я делаю по учебнику и дальше он будет усложняться, правда я его немного переделал, потому что я не понял как он был там написан, и мне интересно где ошибка уже в уме посимвольно все прошел, но ошибки не вижу, поэтому найдите плиз в этом коде ошибку
Lotles вне форума Ответить с цитированием
Старый 03.10.2010, 19:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю следующий парсер:
Код:
#include <string>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    string s="12/45*78 ";
    int i=0;
    for(int k=0;k<s.length();k++){
        i+=(s[k]>='0'&&s[k]<='9')?1:0;
    }
    string *a=new string [i];
    i=0;
    for(int k=0;k<s.length();k++){
        if(s[k]>='0'&&s[k]<='9'){a[i]+=s[k];} else {i++;}
    }

    for(int k=0;k<i;k++){
        cout<<a[k]<<'\n';
    }
    getchar();
    return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анализатор! gallion Помощь студентам 2 19.05.2010 09:32
Синтаксический анализатор delphin100 Общие вопросы Delphi 10 01.05.2010 12:50
морфологический анализатор Lavisa Помощь студентам 0 19.10.2009 23:11
Спектральный анализатор Vladya Общие вопросы Delphi 4 25.05.2009 11:16