pat-bl-1029

来源:互联网 发布:ps10.0官方软件下载 编辑:程序博客网 时间:2024/06/10 19:32

pat-bl-1029

2017-01-20

  • 字符串遍历&比较
  • 坑点:最后一个测试点的坏键在最后,如果循环的跳出条件写的有问题(比如以遍历完字符串2为结束)就会出错
/** * pat-bl-1029 * 2017-01-20 * C version */#include<stdio.h>#include<string.h>int main(){  freopen("in.txt", "r", stdin);  char str1[100], str2[100];  int alp[26] = {0}, num[10] = {0}, _flag = 0;//分别是字母、数字和下划线是否坏掉的标志  scanf("%s", str1);  scanf("%s", str2);  // printf("strlen(str1) = %lu\n", strlen(str1));  // char test1 = 'a', test2 = 'A';  // printf("a: %d, A: %d\n", test1, test2);  //把两个字符串中的小写都变成大写字母  for(int i = 0;i < strlen(str1);i++)  {    if(str1[i] <= 'z' && str1[i] >= 'a')    {      str1[i] -= 32;    }  }  for(int i = 0;i < strlen(str2);i++)  {    if(str2[i] <= 'z' && str2[i] >= 'a')    {      str2[i] -= 32;    }  }  //printf("str1 = %s, str2 = %s\n", str1, str2);  //遍历字符串1,和字符串2的当前字符比较,如果相等,两个当前位置都后移,继续比较;否则输出该坏键  //注意循环控制条件应该是字符串1是否结束而非字符串2,不然会导致在字符串末尾的坏键没有被判断  int j = 0;  for(int i = 0, j = 0;i < strlen(str1);i++)  {    if(str1[i] == str2[j] && j < strlen(str2))    {      j++;    }    else    {      if(str1[i] <= '9' && str1[i] >= '0')      {        if(num[str1[i] - '0'] == 0)//该坏键第一次出现,输出坏键,并置标志位为1        {          printf("%c", str1[i]);          num[str1[i] - '0'] = 1;        }      }      else if(str1[i] == '_')      {        if(_flag == 0)        {          printf("_");          _flag = 1;        }      }      else if(str1[i] <= 'Z' && str1[i] >= 'A')      {        if(alp[str1[i] - 'A'] == 0)        {          printf("%c", str1[i]);          alp[str1[i] - 'A'] = 1;        }      }    }//else end  }  putchar('\n');}

-FIN-

0 0
原创粉丝点击