首页 > 试题广场 >

请写一段代码,可以将输入为”0.0.0.0”—“255.25

[问答题]

请写一段代码,可以将输入为”0.0.0.0”“255.255.255.255”的字符串转换为int型整数数组。

输入:”255.255.255.255”

输出:255 255 255 255 (数组)

#include<stdio.h>
#include<stdilib.h>
#include<string.h>

int main()
{
    char arry[20];
    int res[4]={0};
    gets(arry);
    int len=strlen(arry);
    int i=0,count=0;
    while(i<len)
    {
        if(arry[i]=='.')
        {
            count++;
            i++;
        }
        res[count] *=10;
        res[count] +=(arry[i]-'0');
        i++;
    }
    for(int j=0;j<4;j++)
    {
        printf("%d\t",res[j]);
    }
}

发表于 2019-08-20 15:11:49 回复(3)
上面几个回答没有保证0-255范围
int main()
{
    char ip[] = "0.0.0.0";
    int dec[4] = {0};
    scanf("%s.%s.%s.%s", ip);
    sscanf(ip, "%d.%d.%d.%d", &dec[0], &dec[1], &dec[2], &dec[3]);
    if (dec[0] < 0 || dec[0] > 255 || dec[1] < 0 || dec[1] > 255 ||
        dec[2] < 0 || dec[2] > 255 || dec[3] < 0 || dec[3] > 255)
        printf("error : should enter 0~255\n");
    else
        printf("%d.%d.%d.%d", dec[0], dec[1], dec[2], dec[3]);
    return 0;
}

发表于 2021-03-02 12:09:46 回复(1)
#include <stdio.h>
char str[] = "255.255.255.255";
int num[4] = {0};

int main()
{
scanf("%s.%s.%s.%s",str);
sscanf(str,"%d.%d.%d.%d", &num[0], &num[1], &num[2], &num[3]);
for (size_t i = 0; i < 4; i++)
printf("%d\n", num[i]);
return 0;
}
编辑于 2020-03-30 18:18:06 回复(2)
#include <stdio.h>
#include<stdlib.h>

int main(){
    char a;
    int b[4] = {0};
    int i = 0;
    while ((a = getchar()) != '\n'){
        if (a =='.'){
            ++i;
            continue;
        }
        b[i] = b[i] * 10 + a - '0';
    }
    printf("%d %d %d %d",b[0] b[1] b[2] b[3]);
    return 0;
}

编辑于 2021-07-23 19:30:30 回复(0)
#include <stdio.h>
// 时间:2020年7月24日08:30 
// 测试题,输入255.255.255.255的字符串,输出255 255 255 255 的数组 
char ipstr[16];
int result[4];
void ipstr2num(char *str); 
int main(void) 
{
	printf("请输入一个合法的IP地址\n");
	scanf("%s", &ipstr);
	ipstr2num(ipstr);
	return 0;
}
void ipstr2num(char* str)
{
	int j = 0;
	int num = 0;
	while(*str != '\0')
	{
		while((*str != '.') && (*str != '\0'))
		{
			num = num * 10 + *str - '0';
			str += 1;
		}
		result[j] = num;
		num = 0;
		printf("%d\t",result[j]);
		if (*str == '\0')
		{
			break;
		}
		else
		{
			str += 1;
			j += 1;	
		}	
	}
}


编辑于 2020-11-06 09:42:10 回复(2)
#include <stdio.h>
(737)#include <stdlib.h>
#include <string.h>
int main()
{
    int i,n,cnt,out[4];
    char num[32];
    while(scanf("%s",num) != EOF)
    {
        n = strlen(num);
        for(i=0,cnt=0; i<n; i++)
        {
            out[cnt++] = atoi(num+i);
            while(num[i] != '.' && num[i] != 0)
                i++;
        }
        for(i=0; i<4; i++)
            printf("%d ",out[i]);
    }
    return 0;
}

发表于 2020-03-21 15:42:47 回复(0)
#include <iostream>
#include<vector>
#include<string>
#include<set>
using namespace std;


int main(int argc, const char * argv[]) {

    string a;
    int result[4] = {0};
    cin >> a;
    int i = 0,count=0;
    while (i<a.size())
    {
        if (a[i] == '.')
        {
            count++;
            i++;
        }
        result[count] *= 10;
        result[count] += (a[i] - '0');
        i++;    
    }
    for (int i = 0; i < 4; i++)
        cout << result[i] << endl;

    return 0;
}
发表于 2019-08-12 14:50:35 回复(0)
#include<iostream>
using namespace std;
#include<string>

int main()
{
    string a;
    int result[4] = {0};
    cin >> a;
    int i=0,count=0;
    while (i<a.size())
    {
        if (a[i] == '.')
        {
            count++;
            i++;
        }
        result[count] *= 10;
        result[count] += (a[i] - '0');
        if(result[count]>255)
        {
            cout<<"数据只能在0.0.0.0~255.255.255.255之间"<<endl;
            break;
        }
        i++;    
    }
    while(result[0]<=255 && result[1]<=255 && result[2]<=255 && result[3]<=255)
    {
        for (int i = 0; i < 4; i++)
        {
            cout << result[i]<<" ";
        }
        cout<<"(数组)"<<endl;
        break;
    }
    return 0;
}
发表于 2023-09-05 22:32:27 回复(0)
#include <string.h>
#include <stdio.h>
int main()
{
    char str[]="0.0.0.0~255.255.255.255";
    char arr[]={0};
    int new_arr[4]={0};
    char* ret = NULL;//初始化ret
    strcpy(arr,str);
    for(ret=strtok(arr,'.');ret!=NULL;ret=strtok(NULL,'.'))
    {
        int i=0;
        switch(i)
        {
            case 0:new[i]=ret;break;
            case 1:new[i]=ret;break;
            case 2:new[i]=ret;break;
            case 3:new[i]=ret;break;
        }
        i++;
    }
    if (new[0] < 0 || new[0] > 255 || new[1] < 0 || new[1] > 255 ||
        new[2] < 0 || new[2] > 255 || new[3] < 0 || new[3] > 255)
        printf("error : should enter 0~255\n");
    else
        printf("%d.%d.%d.%d", new[0], new[1], new[2], new[3]);
    
}

发表于 2022-08-28 20:10:04 回复(0)
#include<stdio.h>
(737)#include<stdlib.h>
#include<string.h>
(845)#define STLEN 20
void main(void)
{
	char arry[STLEN];
	int res[4]={0};
	puts("Enter address");
	fgets(arry,STLEN,stdin);
	int len = strlen(arry);
	int i = 0 ;
	int count = 0;
	while(i<len)
	{
		if(arry[i]=='.'||i==len-1)
		{
			count++;
			i++;
		}
		res[count]*=10;
		res[count]+=(arry[i]-'0');
		i++;
	}
	for(int j=0;j<4;j++)
	{
		printf("%d\t",res[j]);
	}
	
}

发表于 2020-04-26 18:56:28 回复(0)
void Ip_str2int(const char* ip_str,int* ip_num)
{
    int i = 0;
    int num_member = 0;
    int num_memberlen = 0;
    char ip_str_member[3] = {0};
    int ip_str_member_len = 0;
    for(;i<strlen(ip_str);i++)
    {
        while(ip_str[i]!='.')
        {
            ip_str_member[ip_str_member_len] = ip_str[i];
            ip_str_member_len++;
            i++;
        }
        for(i = 1;i<=ip_member_len;i++)
        {
            num_member += pow(10,num_memberlen - i)*(ip_member[i-1]-'0');
        }
        ip_num[num_memberlen] = num_member;
        num_memberlen++;
        ip_str_member_len = 0;
    }
}

发表于 2020-03-31 17:29:19 回复(0)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    int  res[4] = {0};
    char arry[20];
    int i = 0;count = 0;
    gets(arry);
    int len = strlen(arry);
    while(i<len)
    {
        if(arry[i]=='.')
        {
            count++;
            i++;
        }
        res[count] = res[count]*10+(arry[i]-'0');
    }
    for(i=0;i<4;i++)
    {
        printf("%d",res[i]);
    }
}
发表于 2019-08-23 14:20:06 回复(0)
编辑于 2024-03-15 10:25:07 回复(0)
#include <stdio.h>                                                          
void Chtoint(char *str,int *arr)
{
    int i,j,num;
    for(i = 0; i < 4; i++)
    {
        for(j = 0; str[j] != '.'; j++) 
        {
            num = str[j] - '0';
            switch (j)
            {
                case 0:arr[i] = 100*num;break;
                case 1:arr[i] += 10*num;break;
                case 2:arr[i] += num;break;
            }
        }
    }
}

int main(void)
{
     char* str = "255.255.255.255";
     int arr[4] = {0};
     Chtoint(str,arr);
     printf("%d %d %d %d\n",arr[0],arr[1],arr[2],arr[3]);
     return 0;
}
编辑于 2023-12-13 15:56:35 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义一个函数,将字符串转换为整数数组
void str_to_int_array(char *str, int *arr, int size)
{
    // 定义一个指针,用于分割字符串
    char *token;
    // 定义一个变量,用于记录数组的索引
    int index = 0;
    // 使用strtok函数,以"."为分隔符,分割字符串
    token = strtok(str, ".");
    // 循环遍历分割后的字符串
    while (token != NULL && index < size)
    {
        // 使用atoi函数,将字符串转换为整数,并存入数组中
        arr[index] = atoi(token);
        // 更新索引
        index++;
        // 继续分割字符串
        token = strtok(NULL, ".");
    }
}

// 定义一个函数,打印整数数组
void print_int_array(int *arr, int size)
{
    // 定义一个变量,用于循环遍历数组
    int i;
    // 打印数组的开头符号
    printf("[");
    // 循环遍历数组
    for (i = 0; i < size; i++)
    {
        // 打印数组的元素
        printf("%d", arr[i]);
        // 如果不是最后一个元素,打印逗号和空格
        if (i < size - 1)
        {
            printf(" ");
        }
    }
    // 打印数组的结尾符号
    printf("]\n");
}

// 定义主函数
int main()
{
    // 定义一个字符串,存储输入的IP地址
    char str[16] = "255.255.255.255";
    // 定义一个整数数组,存储转换后的结果
    int arr[4];
    // 调用函数,将字符串转换为整数数组
    str_to_int_array(str, arr, 4);
    // 调用函数,打印整数数组
    print_int_array(arr, 4);
    // 返回0,结束程序
    return 0;
}

发表于 2023-10-25 22:15:37 回复(0)
#include <stdio.h>
#define MAX 100

int main() {
    char a[MAX];
    printf("请输入字符串:");
    scanf("%s", a);

    int c[MAX] = {0};
    int i = 0;
    while (*(a + i) != '\0') {
        if (*(a + i) != '.') {
            c[i] = *(a + i);
        }
        i++;
    }

    printf("处理后的字符串:");
    for (int j = 0; j < i; j++) {
        printf("%c", c[j]);
    }
    printf("\n");

    return 0;
}

发表于 2023-09-13 15:46:43 回复(0)
#include<stdio.h>
#include <stdlib.h>  
#include <string.h>
int main(){
    char ip[] = "255.255.255.255";
    int addr[4] = {0};
    int i = 0;
    char *token = strtok(ip,".");
    while(token != NULL){
         addr[i] = (atoi)token;
         i++;
         token = strtok(NULL,".");
     }
    for(i = 0; i < 4; i++){
        printf("%d",addr[i]);
    }
}

发表于 2023-08-18 20:56:11 回复(0)
/**
 * @file    : ip_address.c
 * @author  : KeeneChen
 * @date    : 2023.08.11-19:13:31
 * @details : ip_address
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char ip_address[] = "255.255.255.255";
    int ip_array[4];

    // 读取标准输入
    scanf("%s", ip_address);

    // 方式一:***canf,第一个参数是字符串,第二个参数是格式化字符串,后面的参数是指针,类似的还有sprintf
    sscanf(ip_address, "%d.%d.%d.%d", &ip_array[0], &ip_array[1], &ip_array[2], &ip_array[3]);

    /**
     * 方式二:使用strtok,第一个参数是字符串,第二个参数是分隔符,返回值是分隔后的字符串
     * 当第一个参数为NULL时,表示继续分隔上一次的字符串,直到返回NULL
     * atoi是将字符串转换为整数的函数
     */
    char* token = strtok(ip_address, ".");
    int i       = 0;

    while (token != NULL) {
        ip_array[i++] = atoi(token);
        token         = strtok(NULL, ".");
    }

    // 遍历数组
    for (int i = 0; i < 4; i++) {
        printf("%d ", ip_array[i]);
    }
    printf("\n");

    return 0;
}

发表于 2023-08-11 19:15:55 回复(0)
//都太麻烦了
//好像没说不能用库函数吧
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char num_str[50];
    int num[4];
    char* end,* start;

    scanf("%s", num_str);

    start = num_str;
    for (int i = 0; i < 4; i++)
    {
        num[i] = strtol(start,&end,10);
        printf("%ld\r\n", num[i]);
        start = end;
        start += 1;
    }
    return 0;
}

发表于 2023-06-09 10:39:30 回复(0)
#include <iostream>
#include <string>
using namespace std;

int main()
{
    int ret = 0;
    char* a = NULL;
    a = (char*)malloc(20);
    int result[4] = { 0 };
    cin >> a;    
    ret = sscanf_s(a, "%d.%d.%d.%d", &result[0], &result[1], &result[2], &result[3]);
    cout << result[0] << " " << result[1] << " " << result[2] << " " << result[3] << endl;
}

编辑于 2023-04-25 14:14:33 回复(0)