Форум: Форум C++Разное
Новые темы: 00
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Работа с подстроками.
 
 автор: Min_Fin   (07.11.2009 в 09:15)   письмо автору
 
 

Нужна помощь. Я разбил строку на подстроки (слова). Как мне сделать так, чтобы эти подстроки шли в обратном порядке? Например,было: "Назвался груздем полезай", а стало: "полезай груздем Назвался". Язык visual c++. Вот код разбивки на подстроки:

#include <stdio.h>
#include<iostream.h>
#include <windows.h>



int main()
{
char S[150]; //объявлет строку
char* pS; //объявляет указатель на строку
char* Del=" .,"; //объявляет и инициализирует указатель на строку разделителей
CharToOem ("Назвался груздем, пеняй на себя.", S); //преобразует символы кириллицы
pS = strtok (S, Del); //инициализирует указатель адресом первого слова

//вывод подстрок:
if (pS) cout << pS << '\n';
while (pS)
{
pS = strtok(NULL, Del);
if (pS) cout << pS << '\n';
}

return 0;
}

  Ответить  
 
 автор: heed   (16.11.2009 в 15:23)
 
   для: Min_Fin   (07.11.2009 в 09:15)
 

что-то не соображу как сделать чтобы sizeof() и длинна строки были только столько сколько надо
, и правильно-ли будет так выделять и освобождать память
#include<iostream>
#include <windows.h>
using namespace std;

int main()
{
char S[150]; //объявлет строку
char* pS; //объявляет указатель на строку
char* Del=" .,"// указатель на строку разделителей
int i, count=0;

CharToOem("Назвался груздем, пеняй на себя.", S);
char** arr = new char* [ sizeof(S)+1 ];

pS = strtok( S, Del);
    while( pS != NULL )
    { arr[count] = pS;
cout << ++count <<":\t"<< pS <<"\n";
        pS = strtok( NULL, Del); 
    }
for(i=--count; i>=0; i-- ){
 cout <<"\t"<< arr[i] <<"\n";
}
delete [] arr;
system("pause");
return 0;
}
но VC8 вроде не ругается кроме того что вместо strtok() рекомендуется strtok_s()

  Ответить  
 
 автор: AlMag   (21.11.2009 в 14:31)   письмо автору
 
   для: heed   (16.11.2009 в 15:23)
 

можно вообще рекурсию написать. не надо массива.

char *pS;
....
void Read()
{
  if (pS==NULL) return;
  pS = strtok( NULL, Del);
  Read();
  cout << pS << endl;
}
pS = strtok( S, Del);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования