Про массивы
Как заполнить массив через Окно редактирования Edit
а поконкретнее можно? Ничего не понятно, какой массив, какой(ие) Edit...
Как заполнить массив через Окно редактирования Edit
Если по Edit-у на каждуй элемент массива, то элементарно
а как сканировать строку на наличие слешей напишите если можно
В 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 <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], так что разделитель можешь выбирать на свое усмотрение, или пробел или косая черта или то и др. вместе.
ЗЫ
кстате в учебнике написано так
{
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", она ее изменяет а это не возможно т.к. это строка определяется как константа ... вроде так.
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;
}
Можешь использовать следующюю функцию
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
На С++ писать удобнее.
Да и велосипед изобретать не надо.