我從字符串格式數據庫中讀取IP地址,但我想告訴他們的IP格式類似192.168.100.155將輸入的字符串IP地址格式
char formatAs_Ipaddress(const char *str)
此功能會格式化傳遞到字符串它的形式是IP地址,即255001001001
將返回爲255.1.1.1
我可以爲我的查詢獲得更優化的方式嗎?
我從字符串格式數據庫中讀取IP地址,但我想告訴他們的IP格式類似192.168.100.155將輸入的字符串IP地址格式
char formatAs_Ipaddress(const char *str)
此功能會格式化傳遞到字符串它的形式是IP地址,即255001001001
將返回爲255.1.1.1
我可以爲我的查詢獲得更優化的方式嗎?
我試過這樣做,它爲我工作。
char formatAs_Ipaddress(const char* str) {
char getval;
if(str!=0) {
char temp[256]; memset(temp,0,256);
int len = strlen(str);
int cnt = 0;
for(int i=0,j=0;i<len;++i) {
temp[j] = str[i];
if(i>=11) {
break;
}
++j;
++cnt;
if(cnt!=0 && cnt%3==0) {
temp[j]='.';
++j;
}
}
getval = temp;
}
return getval;
}
這是否編譯? – esskar
char *format_ipaddress(const char *input, char *output, int size)
{
if (input == NULL || output == NULL || size < 16) // invalid parameters
return NULL;
int len = strlen(input);
if (len != 12) // input looks invalid
return NULL;
char *outptr = output;
for(int i = 0; i <= 9; i += 3)
{
char *inptr = input + i;
int inlen = 3;
while (inlen > 1 && *inptr == '0')
{
// remove zeros at beginning of subnet block
++inptr;
--inlen;
}
memcpy(outptr, inptr, inlen);
outptr += inlen;
if (i < 9)
*outptr++ = '.';
}
*outptr = 0; // ensure output ends with a \0
return output;
}
char *input = "192168010010";
char output[16];
char *result;
result = format_ipaddress(input, output, sizeof(output));
if (result != NULL)
{
printf("'%s' formated as ip address: '%s'", input, result);
}
else
{
printf("Something went wrong. Check your input.\n");
}
你有什麼確切的輸入?什麼是字符串和什麼是ip格式? – esskar
這裏我正在考慮一個Ipv4地址輸入字符串,類似於192168010010,我的預期輸出來自此函數是192.168.10.10 –
爲什麼您將問題標記爲C++並提出C風格的解決方案? –