PDA

Показать полную графическую версию : строки в С++


rodman
26-06-2004, 19:01
из строки IN = "aa dd ff rr" надо создать массив строк OUT :"aa","dd","ff","rr".
длина IN известна.

пожалуйста не бросайте в беде начинающего!!!!!!!!!!!!!!!!!!!!!!!!!!!

Vlad Drakula
26-06-2004, 19:30
rodman
добро позаловать на форум ;)

я помогу тебе с этой проблеммной ( чуть поздже, сейчс просто нет времени чтобы напистаь соответсвующий код), но я должен пердупредит что в результате я на выделяю определенное количество памяти котлорое надо будет потом не забыть освободить!

hasherfrog
28-06-2004, 14:56
rodman
Пример, написанный сходу. Больше похоже на С, нежели на с++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
 char IN[]="aa bb cc dd";
 char **OUT=NULL;
 char *p=IN;
 char *pszn = NULL;
 int n=0;

 while (pszn = strsep(&p, " "))
 {
   OUT=(char**)realloc(OUT, sizeof(char*)*(n+2));
   if (!OUT) { perror("realloc"); return -1; }
   OUT[n]=pszn;
   n++;
 }

 OUT[n]=NULL;
 for (n=0, p=OUT[0]; p=OUT[n]; n++)
 printf("%s\n", p);

...

 //не забудьте освободить OUT
 free(OUT);
 return 0;
}

pva
30-06-2004, 12:01
на C++:  :up:
#include <sstream>
#include <string>
using namespace std;

...

string input1 = "aa bb cc dd12 eefg";
stringstream oss(input1);

string s1, s2, s3, s4, s5;

oss >> s1 >> s2 >> s3 >> s4 >> s5;

cout << s1 << endl;
cout << s2 << endl;
cout << s3 << endl;
cout << s4 << endl;
cout << s5 << endl;

на экране выдаст твои слова, каждое в новой строке.

Добавлено:

как тут "код" пишется?


Исправлено: hasherfrog, 9:03 1-07-2004

hasherfrog
30-06-2004, 13:04
pva тэг {{code}} {{/code}}



Добавлено:

pva
Проблема в том, что число слов у Вас заранее известно. У rodman известна длина IN, а не число слов.

rodman
01-07-2004, 00:03
Спасибо * hasherfrog * и * pva * !
я просто переносил программу с Бейсика на С++ соблазнившись легкостью создания GUI в Builder'e. поэтому не смейтесь, но народилось вот что:

String StrIN = RichEdit1->Text;
String Buf[128];
unsigned short k = 1;

for (unsigned short i = 1; i <128; i++){
*Buf[i] = MidStr(StrIN, k, 2);
*k = k + 3;/// не полностью сформулировал условия (длина элементов Buf тоже была известна-Sorry:-)))
........

Еще раз спасибо за ответы - пригодятся.

hasherfrog
01-07-2004, 09:08
rodman
>> длина элементов Buf тоже была известна
Нууу, тогда это совсем по-другому надо было делать... Поточнее будьте в следующий раз.

pva
02-07-2004, 12:54
На счёт кол-ва слов:


string st;
while(oss>>st)
{
   // do something with st
   cout << st;
}




© OSzone.net 2001-2012