2013-02-21 3 views
15

К примеру, у меня есть эта строка: 10.10.10.10/16Получить подстроку до определенного полукокса в (с)

и я хочу, чтобы удалить маску с этого IP и получить: 10.10.10.10

Как это можно сделать?

+6

Вы можете объединить 'зЬй :: строка :: substr() 'и' std :: string :: find() ' –

+0

, если вы в порядке с уничтожением исходной строки, вы можете использовать' strchr ('/') = '\ 0'' – aragaer

+0

, вы также можете использовать ' memchr', а затем 'strcpy'. – Raj

ответ

12

Просто поместите 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++

+7

Впустую память! все 3 байта! – 75inchpianist

+1

@ 75inchpianist Что вы подразумеваете под этим? Где память «впустую» и как? – 2013-02-21 16:34:56

+0

Не должно быть '* p = '\ 0';' – stedotmartin

3
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 
+0

им жаль, но c это то, что мне нужно. отредактировал мои теги. – Itzik984

16

Вот как вы могли бы сделать это в 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; 
} 
+0

Мне очень жаль, c мне то, что мне нужно – Itzik984

0

Пример в

char ipmask[] = "10.10.10.10/16"; 
char ip[sizeof(ipmask)]; 
char *slash; 
strcpy(ip, ipmask); 
slash = strchr(ip, '/'); 
if (slash != 0) 
    *slash = 0; 
1

Я вижу, что это в 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'; 
} 
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; 
} 
Смежные вопросы