当前位置:   article > 正文

L1-064 估值一亿的AI核心代码题解

l1-064 估值一亿的ai核心代码

用C语言实现,具体思路是:先将输入的字符串装入数组,然后将不规则的字符串规范化(即将输入的不规则的字符串转换成日常英语的书写的规范一致),然后通过遍历,将一般的字符直接输出(例如数字,空格和非转换的字符),将特别的字符转换成想要的字符进行输出。

  1. #include<stdio.h>
  2. #include<string.h>
  3. #define N 1300
  4. int main(){
  5. int i,j,k,n,x;
  6. char a[N],b[N];
  7. char arr1[]="can you",arr2[]="could you";
  8. scanf("%d",&n);
  9. getchar();
  10. for(i=0;i<n;i++){
  11. gets(a);
  12. puts(a);
  13. printf("AI: ");
  14. j=0;k=0;
  15.         //将输入的字符串规范化
  16. while(a[j]!='\0'){
  17.             //将非空格字符串读入
  18. if(a[j]!=' '){
  19.                 //将非I的大写字符转换成相应小写字符
  20. if(a[j]>='A'&&a[j]<='Z'&&a[j]!='I'){
  21. b[k]=a[j]+32;
  22. k++;
  23. }else if(a[j]=='?'){        //将?号转换成!号
  24. b[k]='!';
  25. k++;
  26. }else{                //小写字符直接添加
  27. b[k]=a[j];
  28. k++;
  29. }
  30. j++;
  31. }else{        //消除多余的空格字符
  32. if(j==0){
  33. while(a[++j]==' '); //消除开头的空格字符
  34. }else{
  35. while(a[++j]==' ');
  36. if((a[j]>='a'&&a[j]<='z')||(a[j]>='A'&&a[j]<='Z')||(a[j]>='0'&&a[j]<='9')){
  37. b[k]=' ';        //将字符之间的多个空格字符变成一个字符
  38. k++;
  39. }else continue;        //消除标点符号前和结尾多余的空格字符
  40. }
  41. }
  42. }
  43. b[k]='\0';
  44. x=0;
  45.         //将得到的规范化字符串进行遍历输出
  46. while(b[x]!='\0'){
  47. if(b[x]!='c'&&b[x]!='I'&&b[x]!='m'){ 
  48. printf("%c",b[x]);            //将一般字符直接输出
  49. x++;
  50. }else{            //对特殊字符进行判断
  51. if(b[x]=='I'){
  52. if(x!=0){        //特殊字符不在开头
  53. if((b[x-1]>='0'&&b[x-1]<='9')||(b[x-1]>='A'&&b[x-1]<='Z')||(b[x-1]>='a'&&b[x-1]<='z')||(b[x+1]>='0'&&b[x+1]<='9')||(b[x+1]>='A'&&b[x+1]<='Z')||(b[x+1]>='a'&&b[x+1]<='z')){                            //判断是否是独立的特殊字符I
  54. printf("%c",b[x]);
  55. x++;            //不是特殊字符直接输出
  56. }else{
  57. printf("you");    //是特殊字符转换输出
  58. x++;
  59. }
  60. }else{            //特殊字符在开头
  61. if((b[x+1]>='0'&&b[x+1]<='9')||(b[x+1]>='A'&&b[x+1]<='Z')||(b[x+1]>='a'&&b[x+1]<='z')){                    //判断是否是独立的特殊字符I
  62. printf("%c",b[x]); 
  63. x++;            //不是特殊字符直接输出
  64. }else{
  65. printf("you");
  66. x++;            //是特殊字符转换输出
  67. }
  68. }
  69. }else if(b[x]=='m'){
  70. if(b[x+1]=='e'){
  71. if(x!=0){        //特殊字符不在开头
  72. if((b[x-1]>='0'&&b[x-1]<='9')||(b[x-1]>='A'&&b[x-1]<='Z')||(b[x-1]>='a'&&b[x-1]<='z')||(b[x+2]>='0'&&b[x+2]<='9')||(b[x+2]>='A'&&b[x+2]<='Z')||(b[x+2]>='a'&&b[x+2]<='z')){                //判断是否是独立的特殊字符me
  73. printf("%c",b[x]);    //直接输出
  74. x++;
  75. }else{
  76. printf("you");        //转换输出
  77. x=x+2;
  78. }
  79. }else{            //特殊字符在开头
  80. if((b[x+2]>='0'&&b[x+2]<='9')||(b[x+2]>='A'&&b[x+2]<='Z')||(b[x+2]>='a'&&b[x+2]<='z')){            //判断是否是独立的特殊字符me
  81. printf("%c",b[x]);    //直接输出
  82. x++;
  83. }else{
  84. printf("you");        //转换输出
  85. x=x+2;
  86. }
  87. }
  88. }else{                //不是特殊字符,直接输出
  89. printf("%c",b[x]);
  90. x++;
  91. }
  92. }else if(b[x]=='c'){
  93. if(strstr(b+x,arr1)-(b+x)==0){
  94. if(x!=0){        //特殊字符不在开头
  95. if((b[x-1]>='0'&&b[x-1]<='9')||(b[x-1]>='A'&&b[x-1]<='Z')||(b[x-1]>='a'&&b[x-1]<='z')||(b[x+7]>='0'&&b[x+7]<='9')||(b[x+7]>='A'&&b[x+7]<='Z')||(b[x+7]>='a'&&b[x+7]<='z')){                //判断是否是独立的特殊字符can you
  96. printf("%c",b[x]);        //直接输出
  97. x++;
  98. }else{
  99. printf("I can");        //转换输出
  100. x=x+7;
  101. }
  102. }else{            //特殊字符在开头
  103. if((b[x+7]>='0'&&b[x+7]<='9')||(b[x+7]>='A'&&b[x+7]<='Z')||(b[x+7]>='a'&&b[x+7]<='z')){            //判断是否是独立的特殊字符can you
  104. printf("%c",b[x]);        //直接输出
  105. x++;
  106. }else{
  107. printf("I can");        //转换输出
  108. x=x+7;
  109. }
  110. }
  111. }else if(strstr(b+x,arr2)-(b+x)==0){
  112. if(x!=0){            //特殊字符不在开头
  113. if((b[x-1]>='0'&&b[x-1]<='9')||(b[x-1]>='A'&&b[x-1]<='Z')||(b[x-1]>='a'&&b[x-1]<='z')||(b[x+9]>='0'&&b[x+9]<='9')||(b[x+9]>='A'&&b[x+9]<='Z')||(b[x+9]>='a'&&b[x+9]<='z')){                //判断是否是独立的特殊字符could you
  114. printf("%c",b[x]);        //直接输出
  115. x++;
  116. }else{
  117. printf("I could");        //转换输出
  118. x=x+9;
  119. }
  120. }else{            //特殊字符在开头
  121. if((b[x+9]>='0'&&b[x+9]<='9')||(b[x+9]>='A'&&b[x+9]<='Z')||(b[x+9]>='a'&&b[x+9]<='z')){            //判断是否是独立的特殊字符could you
  122. printf("%c",b[x]);        //直接输出
  123. x++;
  124. }else{
  125. printf("I could");        //转换输出
  126. x=x+9;
  127. }
  128. }
  129. }else{
  130. printf("%c",b[x]);        //不是特殊字符,直接输出
  131. x++;
  132. }
  133. }
  134. }
  135. }
  136. printf("\n");
  137. }
  138. return 0;
  139. }

总而言之,处理过程及其繁琐,究其原因是C语言对字符串类型的数据的处理内置函数非常的少,因此不建议用C语言处理这道题,用C++处理会方便很多,下面的链接是用C++语言进行处理的,处理过程非常的简便,有兴趣可以参考一下。(30条消息) pta L1-064 估值一亿的AI核心代码_Dream.Luffy的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/277204
推荐阅读
相关标签
  

闽ICP备14008679号