Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу аналог explode из php
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию аналог explode из php - 26.07.2005, 00:04

Хочу открывать текстовой файл и разбивать его на массив с данными, аналогично explode из php.

Возникает сложность
Во-первых такой функции в таком значении вроде как нет (не уверен)
Во-вторых C и C++ тоже не поддерживают вложенные массивы, что значит, что в элементе массива может содержаться только 1 бит информации?

Я не прав или это можно обыграть?
Ответить с цитированием
  (#2 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 26.07.2005, 00:09

http://www.hardforum.ru/t59190

Нашел ка кделать, не понятно почему мне один знакомый сказал, что в C нет вложенных массивов.
Ответить с цитированием
  (#3 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию Re: аналог explode из php - 26.07.2005, 00:21

Цитата:
Originally posted by Monah IRH+-->
Цитата:
Во-первых такой функции в таком значении вроде как нет (не уверен)
В стандартной библиотеке вроде бы нет. Но написать ее - дело 5 строчек.

<!--QuoteBegin-Monah IRH

[b]Во-вторых C и C++ тоже не поддерживают вложенные массивы, что значит, что в элементе массива может содержаться только 1 бит информации?
Полная чушь. Учи матчасть.
Ответить с цитированием
  (#4 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 26.07.2005, 00:30

Говоря про вложенные массивы (я не знаю как они называются в обиходе... я называю так)

При explode возникает как раз такой случай, ведь сначала идет элементы с кусками разбитого теста, а в каждом элементе находится текст, который тоже побуквенно является массивом длинною strlen (чё сказал?)

В общем в С не возможна ситуация:
Код:
array[][]
Т.к. в С переменная в отличие от php должна быть обязательно объявлена...

Код:
int array[64];

for(...)
{ // читаем файл, ищем разделяющий сивол, заданный заранее
// набиваем массив полученными данными...

array[i] = text;

// где text это кусок текста между разделяющими символами...
}
Разве на C эта программа будет работать?

Или по крайней мере можно ли будет обратить например ко 2му сиволу в 5м элементе?

Код:
 array[5][2]
(Не учитывая нумерацию с нуля) ???
Ответить с цитированием
  (#5 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 26.07.2005, 01:05

Извини, но это полный бред.
Прочти хотя бы Кернигана и Риччи. Или любую книжку по C для начинающих. Тогда многое станет понятным.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 27.07.2005, 00:07

Код:
#include "stdafx.h"

#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

char* explode(int separator, char *string)
{
int i=0, j,k;
int position=0;
char* result;
char *destanation;
char* newstring;
char* snewstring;

newstring="";

while(1)
   {
    if(strlen(newstring)==0)
  {
  destanation = strchr(string, separator);
  position = (int)(destanation - string + 1);

  if(destanation != NULL)
      {
      for(j=0; j<position; j++)
      { newstring[j]= string[j]; }

      result[i] = *newstring;
      i++;
      }
  else
      {
      result[i] = *newstring;    
      break;
      }
  }
    else
  {
  snewstring = "";
  destanation = strchr(newstring, separator);
  position = (int)(destanation - newstring + 1);

  if(destanation != NULL)
      {
      for(j=0; j<position; j++) snewstring[j]=newstring[j];
      result[i] = *snewstring;
      newstring=snewstring;
      i++;
      }
  else
      {
      result[i] = *snewstring;    
      break;
      }
  }
  for(k=0; k<i; k++) printf("result[%d] = %sn", k, result[k]);
   }

return result;
};

void main()
    {
    system("cls");

    int j;

    char* text;
    char* array;
    int sep = ' ';

    text = "monah i r h";

    array = explode(sep, text);

    printf("Yours string:n%snnExploded values:n", text);

    for(j=0; j<3; j++)
    {
    printf("array[%d] = %cn", j, array[j]);
    }

    getch();
    };
Вот набросал пробник.

Единственная проблема это с перезаписыванием адресов, чего не позволяет сама сиситема, т.к. использую указатели. Как ещё можно кроме указателей отделять переменной n'ую часть памяти? По-мойму никак... Может алгоритм изменить чуток?
Ответить с цитированием
  (#7 (permalink)) Старый
Kanay Kanay вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.07.2005
По умолчанию 27.07.2005, 01:44

Цитата:
Или по крайней мере можно ли будет обратить например ко 2му сиволу в 5м элементе?

Код:
 array[5][2]
Не совсем понял, что ты хочешь от этой жалкой жизни?

вот тебе строка: char* MyStr="Example"
вот пять строк: char* MyStrArr[5]={"Example1","Example2"}
Третий символ в строке: MyStr[2]='a'
Соответственно: MyStrArr[3][6]=' ' - седьмой символ в четвертой строке

Ты об этом?
Ответить с цитированием
  (#8 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 27.07.2005, 21:32

Цитата:
Originally posted by Kanay
[b]<div class='quotetop'>Цитата
Цитата:
Или по крайней мере можно ли будет обратить например ко 2му сиволу в 5м элементе?

Код:
 array[5][2]
Не совсем понял, что ты хочешь от этой жалкой жизни?

вот тебе строка: char* MyStr="Example"
вот пять строк: char* MyStrArr[5]={"Example1","Example2"}
Третий символ в строке: MyStr[2]='a'
Соответственно: MyStrArr[3][6]=' ' - седьмой символ в четвертой строке

Ты об этом? [/quote]
Ага, с этим я уже разобрался... thx.

Интересно раельно ли узнать текст стандартных функций php изнутри?
Ответить с цитированием
  (#9 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 27.07.2005, 22:25

Цитата:
Originally posted by Monah IRH
[b]Интересно раельно ли узнать текст стандартных функций php изнутри?
А в чем проблема? Качай исходники PHP и разбирайся!
Ответить с цитированием
  (#10 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 27.07.2005, 22:42

Цитата:
Originally posted by Garik+-->
Цитата:
<!--QuoteBegin-Monah IRH
Цитата:
[b]Интересно раельно ли узнать текст стандартных функций php изнутри?
А в чем проблема? Качай исходники PHP и разбирайся!
Да я не про то... Я на php программировать умею, и в C по идее должен был бы легко перейти, но все упирается в типы данных, т.к. в отличие от php в С надо указывать точное место в памяти...

А насчет исходников, то я имел в виду например исходники функций родной бибилиотеки, например тех же explode или trim
По крайней мере я хоть знаю как описать функцию empty на С
Ответить с цитированием
  (#11 (permalink)) Старый
Kanay Kanay вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.07.2005
По умолчанию 29.07.2005, 00:53

Цитата:
Originally posted by Monah IRH
[b]...в отличие от php в С надо указывать точное место в памяти...
Это ты где такое вычитал? Или что ты под этим подразумеваешь??? Указывать компилятору на расположение твоей переменной? Я даже на секунду усомнился в правдивости реальной виртуальности
Ответить с цитированием
  (#12 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 29.07.2005, 20:06

Не правильно выразился...
Имел в виду то, что надо вообще указывать типы данных... А если к примеру хочешь использовать саму память не обращая внимания на тип (грубоговоря), то приходится использовать указатели...

В общем не пытайся из ламера в С вытащить знания, а то будет получаться бред (полнейший) , который ты можешь прочитать выше
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Kanay Kanay вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.07.2005
По умолчанию 01.08.2005, 01:51

По понятным вполне причинам используются определенные типы данных, а указатель может быть и "неопределенным" void.
А если используешь память напрямую, то без указателей не обойдешьси...
Да ты неволновайся, освоешся по-немногу...
А вообще, не трать ты время на этот С++, все равно потом либо выше пойдешь (Visual) либо ниже (Asm). Советую идти ниже.
Ответить с цитированием
  (#14 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 01.08.2005, 21:51

Цитата:
Originally posted by Kanay
[b]По понятным вполне причинам используются определенные типы данных, а указатель может быть и "неопределенным" void.
А если используешь память напрямую, то без указателей не обойдешьси...
Да ты неволновайся, освоешся по-немногу...
А вообще, не трать ты время на этот С++, все равно потом либо выше пойдешь (Visual) либо ниже (Asm). Советую идти ниже.
Мне полюбэ придется в Visual Cpp, а точнее я начинал сразу в нем после Турбо С... Там фишка была, что я сдал все лабы по С через неделю после того как их задали... В итоге мне мой препод по информатике дал задание переписать методичку по С на VC... вот такие дела... Приходится осваиватся %)))
Ответить с цитированием
  (#15 (permalink)) Старый
SiMM SiMM вне форума
Member
 
Сообщений: 1,961
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.08.2003
По умолчанию 01.08.2005, 23:35

Цитата:
Originally posted by Monah IRH
[b]А насчет исходников, то я имел в виду например исходники функций родной бибилиотеки, например тех же explode или trim
http://lxr.php.net/
explode
trim
PS: правда не думаю, что тебе будет от этого легче
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
аналог в цифру фаза Видео 1 20.01.2012 23:37
Аналог Switch из Си snarkbird Prolog 13 04.11.2010 19:39
Аналог BookMarks в C# SergeyV .NET 0 28.10.2009 10:39
аналог пластилина LEKSTER Моддинг 23 22.07.2008 03:10
Аналог MakeObjectInstance в VC++ FlyCube Visual C++ 2 13.04.2006 19:36
Разбиваем строку explode в С++ Monah IRH Visual C++ 14 26.10.2005 01:01
Преобразование строки в массив explode imported_mus С/С++ 6 20.05.2005 23:09
Проблема с функцией explode TiViSpider PHP 3 24.05.2004 22:32
Как написать аналог команды arp Amplituda C++ Builder 0 16.05.2004 21:32
Есть ли аналог REPLACE crelby PostgreSQL 0 11.03.2004 10:33
Аналог explode из PHP woland С/С++ 14 25.12.2003 17:51
Срочно нужна функция в javascript - аналог explode Anonymous DHTML, JavaScript, VBScript 3 24.11.2003 15:32



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов