Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Про массивы

8.1K
07 сентября 2004 года
romanini
3 / / 06.09.2004
Как заполнить массив через Окно редактирования Edit
1.8K
07 сентября 2004 года
neutrino4
94 / / 05.09.2003
Цитата:
Originally posted by romanini
Как заполнить массив через Окно редактирования Edit


а поконкретнее можно? Ничего не понятно, какой массив, какой(ие) Edit...

6.3K
10 сентября 2004 года
triclosan
19 / / 11.08.2004
Цитата:
Originally posted by romanini
Как заполнить массив через Окно редактирования Edit



Если по Edit-у на каждуй элемент массива, то элементарно

406
15 сентября 2004 года
vitaly2003s
481 / / 27.07.2004
Можно использовать спец символы в edit box,например так: 1/2/3/4/5/6... ии т.д. а затем в проге брать строку и сканировать ее на наличие сэшей и затем впихивать в массив по порядку. Если нужно знать конкретную длину массива то необходимо будет выполнить 2 прохода,в первом просто определить кол-во элементов,а во втором уже скопировать в созданный массив эти элементы.
8.1K
18 сентября 2004 года
romanini
3 / / 06.09.2004
а как сканировать строку на наличие слешей напишите если можно
1.9K
18 сентября 2004 года
HEvgA
49 / / 16.09.2004
Цитата:
Originally posted by romanini
а как сканировать строку на наличие слешей напишите если можно


В C++ Standart есть удобная функция, какраз для твоего случая: [COLOR=darkblue]char *strtok(char *str1, const char *str2)[/COLOR]
она описана в string.h. Функция strtok() возвращает указатель на следующую лексему в строке, адресуемой параметром str1. Символы образующую строку, адресуемую параметром str2, представляют собой разделители, которые определяют лексему. При отсутствии лексемы возвращается NULL. Чтоб разделить некоторую строку на лексемы, при первом вызове функции strok() параметр str1 должен указывать на начало этой строки. При последующих вызовах функции в качестве параметра str1 нужно использовать нулевой указатель (NULL). Короче если ты укажешь в str1 адрес своей строки то функция возвратит указатель на первую выделенную лексему, а если опять вызовешь туже функцию но с нулевым указателем в str1 то она возвратит указатель на вторую лексему строки которую ты указывал первый раз.
Меньше слов, побольше дела, см. пример думаю теперь все станет понятно, я его из учебника взял и подредактировал к твоему случаю.

Код:
#include <stdio.h>
#include <string.h>

int main()
{
char text[] = "One/two/and qwe/hree/hello/5,025/6";
char *p;
p = strtok(text, "/");
printf("[%s]", p);
do{
p = strtok(NULL, "/");
if(p) printf("[%s]", p);
}while (p);
return 0;
}

она тебе напичатает
[One][two][and qwe][three][hello][5,025][6]
а если изменить параметр str2 например с "/" на "/, ", то она тебе выведит
[One][two][and][qwe][three][hello][5][025][6], так что разделитель можешь выбирать на свое усмотрение, или пробел или косая черта или то и др. вместе.

ЗЫ
кстате в учебнике написано так
 
Код:
int main()
{
char *p;
p = strtok("One/two/and qwe/hree/hello/5,025/6", "/");
printf("[%s]", p);
do{
p = strtok(NULL, "/");

Но это не работает, программа вылитает при попытке обратиться к "One/two/and qwe/hree/hello/5,025/6", она ее изменяет а это не возможно т.к. это строка определяется как константа ... вроде так.
406
18 сентября 2004 года
vitaly2003s
481 / / 27.07.2004
Можешь использовать следующюю функцию

void FreeArrayOfChar(char** ArrayOfChar,DWORD Count)
{
if(ArrayOfChar==0 || Count==0) return;
for(DWORD i=0;i<Count;i++)
{
if(ArrayOfChar!=0) free(ArrayOfChar);
}
free(ArrayOfChar);
}

char** SortSlashToArrayChar(char* InputStr,char Terminator,LPINT OutCount)
{
if(InputStr==0 || OutCount==0) return 0;
char** OutArray;
DWORD len=(DWORD)strlen(InputStr);
char* TempStr=(char*)malloc(len*sizeof(char));
if(TempStr==0) return 0;

DWORD ElementCount=0,i=0;
for(i=0;i<len;i++)
{
if(InputStr==Terminator)
ElementCount++;
}

if(ElementCount==0) return 0;
OutArray=(char**)malloc(ElementCount*sizeof(char*));
if(OutArray==0) return 0;

ElementCount=0;
DWORD countchar=0;

for(i=0;i<len;i++)
{
if(InputStr==Terminator)
{
TempStr[countchar++]=0;
OutArray[ElementCount]=(char*)malloc(countchar*sizeof(char));
if(OutArray[ElementCount]==0) return 0;
strcpy(OutArray[ElementCount],TempStr);
ElementCount++;
countchar=0;
}
else
{
TempStr[countchar]=InputStr;
countchar++;
}
}
free(TempStr);
*OutCount=ElementCount;
return OutArray;
}


int APIENTRY WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int OutCount;
char InputStr[]="1/2/3/4/5/6/abcd/efg";
char** OutArr=SortSlashToArrayChar((char*)InputStr,'/', &OutCount);
//do something with array OutArr with lenght OutCount
//...
//...
//then free array
FreeArrayOfChar(OutArr,OutCount);
return 0;
}
3
18 сентября 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by vitaly2003s
Можешь использовать следующюю функцию

void FreeArrayOfChar(char** ArrayOfChar,DWORD Count)
{
if(ArrayOfChar==0 || Count==0) return;
for(DWORD i=0;i<Count;i++)
{
if(ArrayOfChar!=0) free(ArrayOfChar);
}
free(ArrayOfChar);
}

char** SortSlashToArrayChar(char* InputStr,char Terminator,LPINT OutCount)
{
if(InputStr==0 || OutCount==0) return 0;
char** OutArray;
DWORD len=(DWORD)strlen(InputStr);
char* TempStr=(char*)malloc(len*sizeof(char));
if(TempStr==0) return 0;

DWORD ElementCount=0,i=0;
for(i=0;i<len;i++)
{
if(InputStr==Terminator)
ElementCount++;
}

if(ElementCount==0) return 0;
OutArray=(char**)malloc(ElementCount*sizeof(char*));
if(OutArray==0) return 0;

ElementCount=0;
DWORD countchar=0;

for(i=0;i<len;i++)
{
if(InputStr==Terminator)
{
TempStr[countchar++]=0;
OutArray[ElementCount]=(char*)malloc(countchar*sizeof(char));
if(OutArray[ElementCount]==0) return 0;
strcpy(OutArray[ElementCount],TempStr);
ElementCount++;
countchar=0;
}
else
{
TempStr[countchar]=InputStr;
countchar++;
}
}
free(TempStr);
*OutCount=ElementCount;
return OutArray;
}


int APIENTRY WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int OutCount;
char InputStr[]="1/2/3/4/5/6/abcd/efg";
char** OutArr=SortSlashToArrayChar((char*)InputStr,'/', &OutCount);
//do something with array OutArr with lenght OutCount
//...
//...
//then free array
FreeArrayOfChar(OutArr,OutCount);
return 0;
}



О, Боже! :o
На С++ писать удобнее.
Да и велосипед изобретать не надо.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог