将一个字符串中所有的整数前后加上符号“*”,其他字符保持不变。连续的数字视为一个整数。
数据范围:字符串长度满足
//每次保存前一个字符,在字母和数字中间加*即可。需要额外判断结尾是否为数字 #include <stdio.h> int main() { char c, ch = 127; while ((c = getchar()) != EOF) { if (c > '9' || c < '0') { if (ch <= '9' && ch >= '0') { printf("*"); } printf("%c", c); ch = c; } else if (c <= '9' && c >= '0') { if (ch > '9' || ch < '0') { printf("*"); } ch = c; printf("%c", c); } if (c == '\n') { if (ch <= '9' && ch >= '0') printf("*\n"); break; } } return 0; }
#include <stdio.h> int main() { char arr[100]; gets(arr); int len = strlen(arr); for(int i=0;i<len;i++){ if(arr[i]>='0'&&arr[i]<='9'){ printf("*"); while(arr[i]>='0'&&arr[i]<='9'){ printf("%c", arr[i]); i++; } i--; printf("*"); }else{ printf("%c", arr[i]); } } return 0; }
#include <ctype.h> #include <stdio.h> #include <string.h> int main() { char buffer[128]; int len; scanf("%s", buffer); len = strlen(buffer); if(isdigit(buffer[0])){ printf("*"); } /* 找数字和字母之间的跳变沿 */ for(int i=0;i<len;i++){ int flagP = !!isdigit(buffer[i]); int flagA = !!isdigit(buffer[i+1]); printf("%c", buffer[i]); if(flagP + flagA == 1){ printf("*"); } } return 0; }
#include <stdio.h> int main() { char str[200] = {0}; char tmp; char i = 0; char isStart = 1; while(scanf("%c", &tmp) != EOF) { if(tmp == '\n'){ if (str[i] >= '0' && str[i] <= '9') str[++i] = '*'; break; } if((i == 0) && (tmp >= '0' && tmp <= '9') && isStart){ str[i] = '*'; str[++i] = tmp; isStart = 0; continue; } else if((i == 0) && (tmp < '0' || tmp > '9') && isStart){ str[i] = tmp; isStart = 0; continue; } if(((str[i] >= '0') && (str[i] <= '9')) && (tmp < '0' || tmp > '9')) { str[++i] = '*'; str[++i] = tmp; continue; } if((str[i] < '0' || str[i] > '9' ) && (tmp >= '0' && tmp <= '9')) { str[++i] = '*'; str[++i] = tmp; continue; } str[++i] = tmp; } printf("%s\n", str); return 0; }
我要是会python该多好
#include <stdio.h> #include <ctype.h> int main() { char str[101] = {0}, *cur = str; scanf("%s", str); while (*cur) { if (isdigit(*cur) && (cur == str || !isdigit(*(cur - 1)))) printf("*"); printf("%c", *cur); if (isdigit(*cur) && (*(cur + 1) == 0 || !isdigit(*(cur + 1)))) printf("*"); cur++; } return 0; }
#include <stdio.h> #include <stdlib.h> typedef struct list { char ch; struct list *next; }list; int main() { list *p0,*p1,*p2; char temp; p2 = p1 = p0 = (list*)malloc(sizeof(list)); scanf("%c", &temp); while (temp != '\n') { p1 = p2; p1->ch = temp; p1->next = malloc(sizeof(list)); p2 = p1->next; scanf("%c", &temp); } p1->next=NULL; p1=p0; p2=p1->next; if(p1->ch>='0'&&p1->ch<='9') { p0=malloc(sizeof(list)); p0->ch='*'; p0->next=p1; } while(p2!=NULL) { if((!(p1->ch>='0'&&p1->ch<='9')&&(p2->ch>='0'&&p2->ch<='9'))|| ((p1->ch>='0'&&p1->ch<='9')&&!(p2->ch>='0'&&p2->ch<='9'))) { p1->next=(list*)malloc(sizeof(list)); p1->next->ch='*'; p1->next->next=p2; } p1=p2; p2=p2->next; } if(p1->ch>='0'&&p1->ch<='9') { p1->next=(list*)malloc(sizeof(list)); p1->next->ch='*'; p1->next->next=NULL; } p1=p0; while(p1!=NULL) { printf("%c",p1->ch); p1=p1->next; } return 0; }
#include<stdio.h> #include<ctype.h> #include<string.h> int main(void) { //定义两个字符数组,ch用于存放原数据,temp用于存放改变后的数据 char ch[101],temp[121]; gets(ch); //获取原数据 int j = 0,i,t=0; //t用于记录连续的数字的个数 for (i = 0; ch[i]!='\0'; i++) //遍历原数组 { if (ch[i] >= '0' && ch[i] <= '9') //当遇到数字字符时 { t+=1; //t记录连续的数字个数,并加一 int flag=1; //记录该数字的左侧或右侧是否被改变 //判断数字字符的左侧是否为非数字 if (!isdigit(ch[i - 1])) { temp[j++] = '*'; temp[j++] = ch[i]; flag=0;//左侧被改变 } //判断数字字符的右侧是否为非数字 if (!isdigit(ch[i + 1])) { if(t==1) //连续部分只有一个数字时 { temp[j++]='*'; } else { temp[j++]=ch[i]; temp[j++]='*'; } flag=0;//右侧被改变 } if(flag) temp[j++]=ch[i]; //未被处理时 } else { temp[j++] = ch[i]; //不是数字字符时 t=0; //t归零,表示数字连续部分结束,下次重新计数 } } //在temp的最后一个有效字符后加上'\0',构成字符串,便于输出 temp[j] = '\0'; puts(temp);//输出结果 return 0; }
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int mark = 0; char str[101] = {'\0'}; while (~scanf("%s", str)) { int len = strlen(str); for (int i = 0; i < len; i++) { if (str[i] >= '0' && str[i] <= '9' && mark == 0) { printf("*"); mark = 1; } else if ((str[i] < '0') || (str[i] > '9') && (mark == 1)) { printf("*"); mark = 0; } printf("%c", str[i]); if (i == (len - 1) && str[i] >= '0' && str[i] <= '9') printf("*\n"); } } }
/* 思路:用一个整形prisdi记录前面一个字符是否为数字 如果in[i]当前字符与前一字符都为数字或都不是,直接输出in[i] 如果in[i]当前字符与前面一个字符类型相异,先输出星号再输出in[i] 结束时若末尾字符为数字,补打印星号结尾 复杂度:时间复杂度为o(n); 空间复杂度O(1) */ #include <stdio.h> #include <ctype.h> #include <string.h> int main(void) { char in[101]; while(scanf("%s", in) != EOF){ int prisdi = 0; for(int i=0; i<strlen(in); i++){ if( isdigit(in[i]) ^ prisdi){ //与前一类型相异,打印星号 putchar('*'); } putchar(in[i]); prisdi = isdigit(in[i]); } if(prisdi){ //处理最后一个字符为数字的情况 putchar('*'); } putchar('\n'); } return 0; }
#include<stdio.h> #include<string.h> #define Size 1000 void back_insert(char str[],int loc,int len) { int i; for(i=len;i>loc;i--){ str[i]=str[i-1]; } str[i]='*'; str[len+1]='\0'; } int main(){ char str[Size]; while(scanf("%[^\n]",str)!=EOF){ scanf("%*[^\n]");scanf("%*c"); int i=0; int t; while(str[i]){ int len=strlen(str); if(str[i]>=48&&str[i]<=57){ back_insert(str,i,len); len++; i+=2; while(str[i]>=48&&str[i]<=57)i++; back_insert(str,i,len); len++; i+=2; }else i++; t=len; } printf("%s\n",str); //重新初始化!!不然会导致第二次输出字符串错误 for(int i=0;i<t;i++){ str[i]='\0'; } } return 0; }
#include<stdio.h> int main() { char a[1000]; int i=0; while(scanf("%s",&a)!=EOF) { int flag=0; for(i=0;i<strlen(a);i++) { if(a[i]>='0'&&a[i]<='9') { if(flag==0) { flag=1; printf("*"); printf("%c",a[i]); } else printf("%c",a[i]); } else { if(flag==0) printf("%c",a[i]); else { printf("*"); printf("%c",a[i]); flag=0; } } if(a[i+1]=='\0'&&flag==1) printf("*"); } printf("\n"); } }