Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как подсчитать кол-во "::" ?


Автор: admsasha 29.4.2005, 11:18
вот такая задача.

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

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

так если делать, то на a3 программа будет ломаться, как можно проверку сделать ?

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

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;
           }


        }

}



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

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


ой, это я опечатался, разделитель только "::", два двоеточия.

Автор: GrayCardinal 30.4.2005, 07:50
Код

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 - результат.
// на правильность не проверял  (я пока без линухи сижу  :( )) но суть такая.


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

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



#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

Автор: GrayCardinal 1.5.2005, 14:08
smile

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


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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)