按格式除了0017其他的数字全部翻倍,并且翻倍后的数字能按照原本的格式正常的输出
2条回答 默认 最新
- 广大菜鸟 2021-11-17 01:37关注
2种方法:第一种根据数据是否有花括号的区别,第二种根据标签
<string>
这样选择
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXSIZE 1024 int isDigit(char c) { return (int)c <= (int)'9' && (int)c >= (int)'0' ? 1 : 0; } //根据标签值有无花括号作为区别 void outputString(char *line) { int len = strlen(line), i = 0; char buffer[MAXSIZE] = "\0"; //缓冲区 int mark = 0; int j = 0; int value; for (i = 0; i < len; i++) { if (line[i] == '{') { printf("%c", line[i]); mark += 1; } else if (line[i] == '}' && j > 0) { mark -= 1; buffer[j] = '\0'; // str -> int value = atoi(buffer); printf("%d", 2 * value); printf("%c", line[i]); j = 0; } else if (mark > 0 && isDigit(line[i])) { buffer[j++] = line[i]; } else if (mark > 0 && line[i] == ',' && j > 0) { buffer[j] = '\0'; // str -> int value = atoi(buffer); printf("%d", 2 * value); printf("%c", line[i]); j = 0; } else { printf("%c", line[i]); } } } //根据标签作为区别 void outputString1(char *line, char *targetMark) { int len = strlen(line), i = 0; char numBuffer[MAXSIZE] = "\0"; //缓冲区 char markBuffer[MAXSIZE] = "\0"; //标签 int label_mark = 0, num_mark = 0, target_mark = 0;//表示 是否为标签范围、数字范围、目标标签 int m_j = 0, n_j = 0; //标签表示,数字表示 int value; for (i = 0; i < len; i++) { if (line[i] == '<') { label_mark = 1; m_j = 0; markBuffer[m_j++] = line[i]; printf("%c", line[i]); } else if (label_mark == 1) { markBuffer[m_j++] = line[i]; printf("%c", line[i]); if (line[i] == '>') { label_mark = 0; markBuffer[m_j] = '\0'; m_j = 0; if(strcmp(markBuffer,targetMark)==0){ target_mark = 1; } } }else if(target_mark==1&&isDigit(line[i])){ numBuffer[num_mark++] = line[i]; }else if(target_mark==1&&num_mark>0&&!isDigit(line[i])){ numBuffer[num_mark]='\0';num_mark=0; // str -> int *2 -> output value = atoi(numBuffer); printf("%d", 2 * value); printf("%c",line[i]); } else{ printf("%c",line[i]); } } } int main() { char line[MAXSIZE + 1] ;//= "<string>{{0,0},{140,44}}</string>"; // outputString1(line, "<string>"); // system("pause"); char*filename="C:/Users/Lenovo/Desktop/1.xml"; FILE*fp=fopen(filename,"r+"); if(fp==NULL) return -1; while(!feof(fp)){ fgets(line,MAXSIZE,fp); outputString1(line,"<string>"); } printf("\n"); fclose(fp); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 请求分析基于spring boot+vue的前后端分离的项目
- ¥15 三菱伺服电机按启动按钮有使能但不动作
- ¥20 为什么我写出来的绘图程序是这样的,有没有lao哥改一下
- ¥15 js,页面2返回页面1时定位进入的设备
- ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
- ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
- ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?