21

たとえば、次の文字列があります。10.10.10.10/16

そのIPからマスクを削除して、次の情報を取得します。10.10.10.10

これはどのように行うことができますか?

4

6 に答える 6

29

これがC++でそれを行う方法です(私が答えたときに質問は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;
}
于 2013-02-21T15:43:24.740 に答える
17

スラッシュの場所に0を付けるだけです

#include <string.h> /* for strchr() */

char address[] = "10.10.10.10/10";
char *p = strchr(address, '/');
if (!p)
{
    /* deal with error: / not present" */
    ;
}
else
{
   *p = 0;
}

これがC++で機能するかどうかはわかりません

于 2013-02-21T15:47:03.363 に答える
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
于 2013-02-21T15:43:09.157 に答える
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';
}
于 2013-02-21T15:48:57.933 に答える
1

C++での例

#include <iostream>
using namespace std;

int main() 
{
    std::string addrWithMask("10.0.1.11/10");
    std::size_t pos = addrWithMask.find("/");
    std::string addr = addrWithMask.substr(0,pos);
    std::cout << addr << std::endl;
    return 0;
 }
于 2017-03-10T18:52:53.900 に答える
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;
于 2013-02-21T15:47:33.373 に答える