Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C substring 
:(
    Опции темы
DarkDS
Дата 5.5.2003, 12:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть строка типа "слово1=слово2+слово3" (в общем то сама строка не так важна..." Нужно с разбить на 3-и подстроки...
Причем положение = и + не известно...
Как можно сделать это используя стандартные функции С?
(все полученные строки должны быть либо char[] либо char*)
  Вверх
HexoGenus
Дата 5.5.2003, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



String a="22!33!A!B!",p,q,w,z;
String * s[4]={&p,&q,&w,&z};
int j=0;
for (int i=1; i<=a.Length(); i++) if (a[i]!='!') *s[j]=*s[j]+a[i]; else j++;

Как то написал, до сих пор приятно смотреть smile.gif
Раскидывает значения разделенные ! по переменным
Измени проверку на "!" на проверку ("=" или "+") и все заработает smile.gif
правда здесь используется способность String добавлять букву в конец строки и функция Length() определяющая длинну строки... но думаю эти функции ты сам сможешь написать для char ... smile.gif

Это сообщение отредактировал(а) HexoGenus - 5.5.2003, 13:55
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
Unregistered
Дата 5.5.2003, 15:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











strchr: finds c in str

char *strchr(const char *str, int c);

Prototype in string.h

Returns a pointer to the first occurrence of the character c in str; if c does not occur in str, strchr returns NULL.


  Вверх
DarkDS
Дата 5.5.2003, 16:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Unregistered @ 5.5.2003, 15:58)
strchr: finds c in str

char *strchr(const char *str, int c);

Prototype in string.h

Returns a pointer to the first occurrence of the character c in str; if c does not occur in str, strchr returns NULL.

strchr не подходит, так как он возращает ссылку на первый символ... То есть если была строка "слово1=слово2+слово3" то при поиске "=" вернется "=слово2+слово3"... То есть это не подстрока получается...
  Вверх
Люда
Дата 5.5.2003, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 24.4.2002

Репутация: нет
Всего: нет



char *token;
char subtrings[128][10];
int i=1;
token=strtok(str,"=");
strcpy(substring[i],token);
while((token=strtok(NULL,"+"))!=NULL)
{
i++;
strcpy(substring[i],token);
}

PM MAIL ICQ   Вверх
DENNN
Дата 5.5.2003, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
strchr не подходит, так как он возращает ссылку на первый символ... То есть если была строка "слово1=слово2+слово3" то при поиске "=" вернется "=слово2+слово3"... То есть это не подстрока получается.

А ты в этой подстроке поищи опять символ-разделитель и получишь подстроку smile.gif

Цитата
правда здесь используется способность String добавлять букву в конец строки и функция Length() определяющая длинну строки... но думаю эти функции ты сам сможешь написать для char ...

Если задача писать именно под чистый C++ то можно просто использовать std:string
PM ICQ   Вверх
Unregistered
Дата 5.5.2003, 19:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
strchr не подходит, так как он возращает ссылку на первый символ... То есть если была строка "слово1=слово2+слово3" то при поиске "=" вернется "=слово2+слово3"... То есть это не подстрока получается...


char *ptr;
if(ptr[1]!= 0) подстрока получается
  Вверх
Guest
Дата 5.5.2003, 20:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(DENNN @ 5.5.2003, 18:12)
А ты в этой подстроке поищи опять символ-разделитель и получишь подстроку smile.gif

Аха... Тока как вот как получить первое слово отдельно?
чтобы было:
"слово1"
"слово2"
"слово3"



  Вверх
DarkDS
Дата 5.5.2003, 20:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Unregistered @ 5.5.2003, 19:44)
Цитата
strchr не подходит, так как он возращает ссылку на первый символ... То есть если была строка "слово1=слово2+слово3" то при поиске "=" вернется "=слово2+слово3"... То есть это не подстрока получается...


char *ptr;
if(ptr[1]!= 0) подстрока получается

char *ptr;
if(ptr[1]!= 0) подстрока получается

Подстрока то подстрока, тока без первой части... а мек как раз первая часть нужна!
  Вверх
DENNN
Дата 5.5.2003, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
Аха... Тока как вот как получить первое слово отдельно?

memcpy нам поможет!
PM ICQ   Вверх
Dov
Дата 29.5.2003, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Код

#include <iostream.h>
#include <string.h>

void main()
{
     char     str[81] = "slovo1+slovo2=slovo3";
     char   *s1 = str,   *s2,   *s3;

     cout << str << endl;

     s2 = strpbrk( s1,   "-$*?+@/=#!" );
   *s2 = '\0';
     s2++;

     s3 = strpbrk( s2,   "-$*?+@/=#!" );
   *s3 = '\0';
     s3++;

     сout << s1 << endl;   //  slovo1
     cout << s2 << endl;   //  slovo2
     cout << s3 << endl;   //  slovo3
}


Это сообщение отредактировал(а) Dov - 29.5.2003, 02:04


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0765 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.