Код на С/С++
Есть строка
char sometext[50]="111.111.111.111 hostname";
её падо поделить на две переменные (например: char Ip[25] и host[25])
Как это сделать по проще? Думаю просто найти вхождение пробела и при помощи его индекса найти два субстринга.
Уверен что это можно сделать проще при помощи какого нить sscanf, scanf или как нить ещё.
У кого какие идеи?
Спасибо.
>Код на С/С++либо С, либо С++, пора уже определится.
решение задачи в главе 'строки' любой книжки для начинающих по С, либо С++.
Разницы нет. Приоритет на C++, но жет быть и С. Можна оба. Любой простой вариант.
>Код на С/С++
>Есть строка
>char sometext[50]="111.111.111.111 hostname";
>её падо поделить на две переменные (например: char Ip[25] и host[25])
>Как это сделать по проще? Думаю просто найти вхождение пробела и при
>помощи его индекса найти два субстринга.
>Уверен что это можно сделать проще при помощи какого нить sscanf, scanf
>или как нить ещё.
>У кого какие идеи?
>Спасибо.Сходу, что пришло в голову, сам не проверял:
char sometext[]="111.111.111.111 hostname";
char *space_pos = NULL;
char *ip = NULL;
char *hostname = NULLspace_pos = strchr(sometext, ' ');
if (space_pos == NULL) {
assert(0 && "sometext should always contains as minimum one space");
}hostname = strdup(space_pos + 1);
space_pos = '\0';
ip = strdup(sometext);Короче. нигде в задании не было условия что строку модифицировать нельзя, так что я решил немного её изменить для пущего удобства.
Потом ещё нужно не забыть сделать free(hostname) и free(ip).
На С++ можно примерно также, только используя необходимые конструкторы std::string
Задача сделать всё как можно проще. Как я и предпологал sscanf тут нужен. Просто работай завален, небыло времени поманить.
//============================================================
#include <stdio.h>int main ()
{
char Sometext[]="111.111.111.111 hostname";
char Ip[20], Host[20];
sscanf (Sometext,"%s %s",Ip,Host);printf ("Ip: %s Host: %s\n",Ip,Host);//Vivodim vsio srazu
return 0;
}
//==========================================================
Попутный вопрос чтоб топиками не мусарить.
Как можно найти исходники в линукс? Например интересует `ifconfig` и `ls`.
>Как можно найти исходники в линукс? Например интересует `ifconfig` и `ls`.Скачайте исходники соответствующих пакетов:
[c0der@mvo ~]$ rpm -qf =ls =ifconfig --qf '%{NAME} %{URL}\n' 12:29
coreutils http://www.gnu.org/software/coreutils/
net-tools http://www.tazenda.demon.co.uk/phil/net-tools
лучше бы не советовал. честно, извини, не удержался.
+1ЗЫ. Пацаны, вы загнули с sscanf, выделением памяти и количеством переменных!
//------------- CUT
char *host, *ip = "10.10.10.10 domain.com"host = strchr (iphost, ' ');
if (host)
*(host++) = '\0';//------------- CUT
Теперь в ip храниться ип, в host - хост.
Parad хороший пример. sscanf думаю более мощный, но твой тоже хороший, только с маленькой ошибочкой.
>//------------- CUT
>char *host, *ip = "10.10.10.10 domain.com"
>
>host = strchr (iphost, ' ');
>if (host)
> *(host++) = '\0';
>
>//------------- CUT
>Все гениальное просто! :) Класс...