Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   строки в С++ (http://forum.oszone.net/showthread.php?t=29624)

rodman 26-06-2004 19:01 204971

из строки IN = "aa dd ff rr" надо создать массив строк OUT :"aa","dd","ff","rr".
длина IN известна.

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


Vlad Drakula 26-06-2004 19:30 204972

rodman
добро позаловать на форум ;)

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

hasherfrog 28-06-2004 14:56 204973

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 204974

на 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;

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

Добавлено:

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


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

hasherfrog 30-06-2004 13:04 204975

pva тэг {{code}} {{/code}}



Добавлено:

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

rodman 01-07-2004 00:03 204976

Спасибо * 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 204977

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


pva 02-07-2004 12:54 204978

На счёт кол-ва слов:

Код:

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



Время: 00:09.

Время: 00:09.
© OSzone.net 2001-