К примеру, у меня есть эта строка: 10.10.10.10/16
Получить подстроку до определенного полукокса в (с)
и я хочу, чтобы удалить маску с этого IP и получить: 10.10.10.10
Как это можно сделать?
К примеру, у меня есть эта строка: 10.10.10.10/16
Получить подстроку до определенного полукокса в (с)
и я хочу, чтобы удалить маску с этого IP и получить: 10.10.10.10
Как это можно сделать?
Просто поместите 0 в месте слэш
#include <string.h> /* for strchr() */
char address[] = "10.10.10.10/10";
char *p = strchr(address, '/');
if (!p) /* deal with error:/not present" */;
*p = 0;
я не знаю, если это работает в C++
Впустую память! все 3 байта! – 75inchpianist
@ 75inchpianist Что вы подразумеваете под этим? Где память «впустую» и как? – 2013-02-21 16:34:56
Не должно быть '* p = '\ 0';' – stedotmartin
char* pos = strstr(IP,"/"); //IP: the original string
char [16]newIP;
memcpy(newIP,IP,pos-IP); //not guarenteed to be safe, check value of pos first
им жаль, но c это то, что мне нужно. отредактировал мои теги. – Itzik984
Вот как вы могли бы сделать это в C++ (вопрос был помечен как С ++, когда я ответил):
#include <string>
#include <iostream>
std::string process(std::string const& s)
{
std::string::size_type pos = s.find('/');
if (pos != std::string::npos)
{
return s.substr(0, pos);
}
else
{
return s;
}
}
int main(){
std::string s = process("10.10.10.10/16");
std::cout << s;
}
Мне очень жаль, c мне то, что мне нужно – Itzik984
Пример в c
char ipmask[] = "10.10.10.10/16";
char ip[sizeof(ipmask)];
char *slash;
strcpy(ip, ipmask);
slash = strchr(ip, '/');
if (slash != 0)
*slash = 0;
Я вижу, что это в C, поэтому я думаю, что ваша «строка» - это «char *»?
Если так что вы можете иметь небольшую функцию, которая чередовать строка и «вырезать» его в определенный знак:
void cutAtChar(char* str, char c)
{
//valid parameter
if (!str) return;
//find the char you want or the end of the string.
while (*char != '\0' && *char != c) char++;
//make that location the end of the string (if it wasn't already).
*char = '\0';
}
Пример в C++
#include <iostream>
using namespace std;
int main()
{
std::string connectionPairs("10.0.1.11;10.0.1.13");
std::size_t pos = connectionPairs.find(";");
std::string origin = connectionPairs.substr(0,pos);
std::string destination = connectionPairs.substr(pos + 1);
std::cout << origin << std::endl;
std::cout << destination << std::endl;
return 0;
}
Вы можете объединить 'зЬй :: строка :: substr() 'и' std :: string :: find() ' –
, если вы в порядке с уничтожением исходной строки, вы можете использовать' strchr ('/') = '\ 0'' – aragaer
, вы также можете использовать ' memchr', а затем 'strcpy'. – Raj