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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как подсчитать кол-во "::" ? 
:(
    Опции темы
admsasha
Дата 29.4.2005, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот такая задача.

в программу поступают, данные типа
aaa::bbb:ccc::, tt::yyy::

Как узнать сколько данных ?
strcpy(a1,strtok(line,"::");
strcpy(a2,strtok(NULL,"::");
strcpy(a3,strtok(NULL,"::");

так если делать, то на a3 программа будет ломаться, как можно проверку сделать ?
PM MAIL WWW ICQ Jabber   Вверх
dargaard
Дата 29.4.2005, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



(Если я правильно понял то данные просто разделены между собой одной или несколькими : символами). Если так то что нить типа:
Код

int main() {
        //char data [] = "aaa::bbbb:ccc::d::e::fffff:9:";
        char data [ ] = "1::::22:333::::4444::1::22:::333:::";
        char cur[100];
        int sz = strlen(data);
        int i;
        int index1, index2;
        index1=-1; index2=-1;
        for (i=0; i<sz; i++) {
           if (data[i] == ':' && index1 != index2) {
                index2 = i;
                strncpy(cur, data+index1, index2);
                cur[index2-index1]='\0';
                printf ("DATA: |%s|\n",cur);
                index1  = i;
           }
           if (data[i] != ':' && index1 == index2 ) {
                index1 = i;
           }


        }

}



К линуксу не имеет никакого отношения. Просьба постить вопросы в правильных разделах.


--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
admsasha
Дата 30.4.2005, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(dargaard @ 30.4.2005, 04:33)
(Если я правильно понял то данные просто разделены между собой одной или несколькими : символами).


ой, это я опечатался, разделитель только "::", два двоеточия.
PM MAIL WWW ICQ Jabber   Вверх
GrayCardinal
Дата 30.4.2005, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

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



Код

int main (int argc, char * argv)
{
  char * S;
  char buf[ ]; // "11::22::33::VOBLA"
  int a;
  int count;

  S = buf;
  a = 0;
  count = 0;
  while (*S)
  {
    a = a << 8;
    a |= *S;
    if (a == '::')
    {
      a = 0;
      count++;
     }
    S++;
  }

  return 0;
}

// count - результат.
// на правильность не проверял  (я пока без линухи сижу  :( )) но суть такая.


ЗЫ:
это у тебя дипломник (сервер и ЭТО) ?


--------------------
PM MAIL WWW   Вверх
pablo
Дата 30.4.2005, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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



Если надо подсчитать количество слов, разделённых ::, то это тривиальная задача !!!
Код



#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char string[100];

    int number = 1;
    cout << "Insert string " << endl;
    cin >> string;
    
    char *tmp = strtok(string, "::");
    cout << tmp << endl;
    
    while(tmp)
    {
        tmp = strtok(0, "::");
        cout << tmp << endl;
        number++;
    }
    cout << number << endl;
    system("pause");  
    return 0;
}



Проверено, и 100% будет работать.
smile


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
GrayCardinal
Дата 1.5.2005, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

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



smile

Это сообщение отредактировал(а) GrayCardinal - 1.5.2005, 14:18


--------------------
PM MAIL WWW   Вверх
admsasha
Дата 1.5.2005, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(GrayCardinal @ 30.4.2005, 14:50)
ЗЫ:
это у тебя дипломник (сервер и ЭТО) ?


да не дипломник это, а это C++ учу. Честное слово ! (буду очень призателен, кто поможет в этом не легком деле)

http://www.krasnokamensk.ru/poker/index.html

сервер написан на C++, клиент на Flash 7 AS 2.0

Это сообщение отредактировал(а) admsasha - 1.5.2005, 17:04
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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