1407 用两种方法对IPV6地址进行压缩的c程序实现
来源:互联网 发布:fcc 网络中立 编辑:程序博客网 时间:2024/05/20 20:44
#include<stdio.h>int main() { int n=10,c,t,m,i,j,k; char str[100]; void qiandao0(char str[]); void shuangmao(char str[]); scanf("%d",&t); while(t--) { scanf("%s",&str); qiandao0(str); // printf("%s\n",&str); shuangmao(str); printf("%s\n" ,str); } return 0;}void qiandao0(char str[]) { int i,j; //qiandao0 for(i=0,j=0; str[j]!='\0'; i++,j++) { if(str[j]=='0' &&(j==0||str[i-1]==':')) {// the first 0 if(str[j+1]!='0') {// 0XXX j++; } else if(str[j+2]!='0') { //00XX j=j+2; } else { //000X 0000 j=j+3; } } str[i]=str[j]; } str[i]='\0';//补上结尾}void shuangmao(char str[]) { int i,j,mao=0; for(i=0,j=0; str[j]!='\0'; i++,j++) { if(mao == 0 ) { //还没传入过 :: if(str[j]=='0'&&str[j+1]=='\0'&&j-1>=0&&str[j-1]==':') { //情况1 X:X:0 if(i==0) { // 还没有传入第一个: 补回 str[0]=':'; i++; //补回后 开始传入第二个冒号 str[i]=':'; mao = 1; continue; } else { //前面X:X: 已经传入第一个冒号 str[i]=':'; mao = 1; continue; } } else if(str[j]=='0'&&str[j+1]==':'&&str[j+2]!='0'&&j-1>=0&&str[j-1]==':') { //情况2 X:X:0:X if(i==0) { // 还没有传入第一个: 补回 str[0]=':'; i++; } j=j+1;//这里不传入 留到 L91统一赋值 mao=1; } else if(str[j]=='0'&&str[j+1]==':'&&str[j+2]=='0'&&j-1>=0 && str[j-1]==':') {//情况3 X:X:0:0.... j=j+2 ; //跳到下一个0位置 j索引值【】 从 X:X:【0】:0.... 变成 X:X:0:【0】.... i--; j--;// to avoid 'for' condition3(i++,j++) continue; } else if(str[j]=='0'&&str[j+1]==':'&&str[j+2]!='0'&&j==0) { //情况4 类似情况2 在开头 0:X if(i==0) { str[0]=':'; i++; } j=j+1; mao=1; } else if(str[j]=='0'&&str[j+1]==':'&&str[j+2]=='0'&&j==0) { //情况5 类似情况3 0:0 j=j+2 ; i--; j--;// to avoid 'for' condition3(i++,j++) continue; } } //不管mao是多少 中间怎么变 除非是continue跳过 不然就都到这里L91来赋值 // printf("str i :%c--%d ",str[i],i); // printf("str j :%c--%d\n",str[j],j); str[i]=str[j]; //L91 进行赋值 } str[i]='\0';//补上结尾}
阅读全文
0 0
- 1407 用两种方法对IPV6地址进行压缩的c程序实现
- Linux C判断两个IPv6地址是否相等的方法
- IPV6地址的更改方法
- ZipControl对文件进行压缩与解压的方法
- ipv6地址表示方法
- IPv6地址表示方法
- java程序实现对文件的压缩和解压
- 如何对PNG进行压缩?PNG24压缩方法
- IPV6的地址
- ipv6地址的分类
- IPv6的地址解析
- IPV6的地址
- IPV6的地址
- Bitmap 实现对图片压缩的2种方法小结
- Objective-C对方法进行注释的方法
- 如何实现对C程序的评分??
- 讲述几点对程序进行效率优化的方法
- android中对程序进行数字证书签名的方法
- Java应用OpenvCV指南其六:利用OpenCV实现的数字识别(验证码识别)
- javascript编程习惯和问题
- spark学习-54-Spark RDD的clean()方法
- 模板
- 重复造轮子-C语言风格string库函数的实现
- 1407 用两种方法对IPV6地址进行压缩的c程序实现
- C语言动态数组建立方法
- 阿里巴巴Java开发手册学习小结3-OOP规约
- leetcode 415. Add Strings 字符串加法
- 求助!!!!急!!!
- Tomcat 日志分割.
- Tag文件的创建与应用
- SSM 框架 Maven项目整合实例
- git 命令--上传代码 && Window系统下搭建GIT本地服务器