C语言(基础程序设计字符串 题目描述 一个合法的域名是形如”..*******”的字符串,由“.“分隔成为2~4段,其中每 段由英文字母、数字或者下划线组成,不允许包含其它字符,下面都是一些 合法的域名: www.baidu.com,www.163.com,www.sina.com.cn,noi.org www.people.com.cn,v.hao123.baidu.com 下面是非法的域名: www,www.v.hao123.baidu.com,www.baidu.,www.baidu#hao.com yeyou.chuanqu.com-new-g408 请编程判断给定的字符串是否是形式上合法的域名 题目中先给出一个整型数n(1≤n≤50),表示后面有n行字符串需要判断。判断给定的学书 是否是形式上台法的域名。 题目中先给出一个整型≤n≤50),表示后面有n行字符串需要判断。随 后的n行中,每行一个字符串,需要进行合法性判断。对于合法的字符串,应 输出”Y”,否则输出“N”,结果中间不用空格。 提示 输入输出格式 输入格式 第一行是正整数数n。从第2行到第n+1行,每行一个字符串,需要判 断其合法性 输出格式 由Y”和”N”组成的一行数据,分别表示第n个数据是合法还是非法 输入输出样例 题目
时间: 2024-04-05 11:32:13 浏览: 97
以下是一份C语言的程序代码,可以判断输入的域名是否合法:
```c
#include <stdio.h>
#include <string.h>
int main()
{
int n;
scanf("%d", &n);
char domain[100];
while (n--)
{
scanf("%s", domain);
int len = strlen(domain);
int dot_count = 0; // 记录点号的个数
int last_dot_pos = -1; // 记录上一个点号的位置
int first_dot_pos = -1; // 记录第一个点号的位置
// 遍历每个字符
for (int i = 0; i < len; i++)
{
if (domain[i] == '.') // 如果是点号
{
dot_count++;
if (last_dot_pos == i - 1) // 连续的点号
{
printf("N\n");
break;
}
if (dot_count == 1)
{
first_dot_pos = i;
}
if (dot_count > 3) // 点号个数超过3个
{
printf("N\n");
break;
}
last_dot_pos = i;
}
else if (!(domain[i] >= 'a' && domain[i] <= 'z') &&
!(domain[i] >= 'A' && domain[i] <= 'Z') &&
!(domain[i] >= '0' && domain[i] <= '9') &&
domain[i] != '_') // 非法字符
{
printf("N\n");
break;
}
}
if (dot_count < 1 || dot_count > 3) // 点号个数不符合要求
{
continue;
}
char last_part[50];
int last_part_len = strlen(domain) - last_dot_pos - 1;
if (last_part_len < 2 || last_part_len > 6) // 最后一部分长度不符合要求
{
printf("N\n");
continue;
}
strncpy(last_part, domain + last_dot_pos + 1, last_part_len);
last_part[last_part_len] = '\0';
if (first_dot_pos == -1) // 只有一部分
{
if (strlen(domain) < 2 || strlen(domain) > 6)
{
printf("N\n");
continue;
}
if (!(domain[0] >= 'a' && domain[0] <= 'z') &&
!(domain[0] >= 'A' && domain[0] <= 'Z') &&
!(domain[0] >= '0' && domain[0] <= '9')) // 第一个字符非法
{
printf("N\n");
continue;
}
}
else if (last_dot_pos - first_dot_pos < 2) // 中间一部分长度不符合要求
{
printf("N\n");
continue;
}
else
{
for (int i = first_dot_pos + 1; i < last_dot_pos; i++)
{
if (domain[i] == '.') // 中间一部分有点号
{
printf("N\n");
goto end;
}
}
}
printf("Y\n");
end:
continue;
}
return 0;
}
```
该程序会读入一个整数n,表示有n个域名需要判断。然后,程序会循环n次,每次读入一个字符串,判断它是否是合法的域名。如果是合法的,程序会输出"Y";否则,程序会输出"N"。
阅读全文