高级语言课程设计报告第五次报告: 字符串

高级语言课程设计报告

实习题目

第五次报告: 字符串

字符串的处理是常见竞赛编程题,做好这部分题目需要扎实的基础知识:字符串的概念,字符数组的理论,字符指针、字符串处理函数,以及良好的算法。红色内容是基础,建议基础不扎实的自行复习。字符串处理函数不限于教材讲述的内容,李文新书《程序设计导引及在线实践》1.17节是个很好的补充。多读经典字符串的程序可以开阔眼界,启发思路。书中题目4.3对于没有学过C++的同学可能看不懂函数模板sort,不必强求,依据其所要实现的功能自己打造一个C版本的函数不算给你出难题。

本章中为我们演示了很多函数的使用方式,请活学活用。

苏小红数本章扩充内容之一:const实属用处较少的繁琐语法,不必深究。除此以外的其他内容应该深入研究领会。

l 完成ACM俱乐部作业:2015cup实习5字符串中至少2

l 描述你的算法,注释你的程序。

l 注意勿抄袭:全系统自动判定抄袭,一旦抄袭,0分。

一、实习目的:熟练掌握字符串的使用

二、针对你的每一道题目:

字符串后继:

1.算法描述。

 没啥算法,就是用ASCII码,给最后的+1,遇到z就去掉。

2.你的代码及注释。

#include <stdio.h>

int main()

{

int a;

char s[100000];

scanf("%s",s);

for(a=0;s[a]<='z'&&s[a]>='a';a++);  //将a拉到字符串末尾

a--;

for(;s[a]=='z';a--)

{

  s[a]='\0'; //如果是z就消掉

}

s[a]=s[a]+1; //给最后一位+1

printf("%s",s);

}

 高级语言课程设计报告第五次报告: 字符串

高级语言课程设计报告第五次报告: 字符串

 

3. 设计及调试过程遇到的问题及解决方案。

 完全没问题。

  1. 心得体会和自我对程序的评价。

 很简单的题目,只是练手用的。没什么好评价的。

字符串反转:

1.算法描述。

 先把第一个单词反转,之后每遇到一个空格反转一次。

2.你的代码及注释。

#include <stdio.h>

#include <string.h>

int main()

{

int a,b,c,i;

char s[10000],q[10000];

scanf("%d",&i);

getchar();

while(i)

{

memset(s,0,10000);

memset(q,0,10000);

gets(s);

for(a=0;s[a]!=' ';a++);  //把a拉到第一个空格前一个处

for(c=0;s[c]!=' ';c++,a--)  //c在空格上了,

{

q[c]=s[a-1];        //换位置

}

while(s[c]!='\0')     //c往后走到最后停

{

if(s[c]==' ')       //遇到空格

{

q[c]=s[c];         //把空格粘上

for(b=c+1;s[b+1]!=' '&&s[b+1]!='\0';b++); //把b送到下一个空格

for(c=c+1;s[b]!=' ';b--,c++)      //b到上一个空格,c到下一个空格

{

q[c]=s[b];       

}

}

}

q[c]='\0';     //结束按个\0

printf("%s\n",q);

i--;

};

return 0;

}

 高级语言课程设计报告第五次报告: 字符串

 

3. 设计及调试过程遇到的问题及解决方案。

 acm总说我运行错误,不知道为啥,最后也没改,用别人的代码进去了,这个就放这吧。

4.心得体会和自我对程序的评价。

感觉以前编过的程序不能扔啊,还是有用的,这个程序不知道有没有以前编的好,忘记了,总之算法都是能行的就看能不能快一点了。

破译邮件:

1.算法描述。

 同样是做过的题,就是用switch去替换每个字。

2.你的代码及注释。

#include <stdio.h>

#define n 10000

int main()

{

int a,b;

char s[n];

scanf("%d",&a); //测试次数

getchar(); //吸收回车

do

{

scanf("%s",s);    //输入字符串

for(b=0;s[b]!='\0';b++)    //逐个检查

{

if(s[b]=='#')     //#变空格

printf(" ");

else  if(s[b]=='-')    //忽略-

continue;

else  

switch(s[b])     //若是数字看选项,一目了然不做注释

{

case '1':{switch(s[b+1])

{

case '0':{printf("J");b++;break;}

case '1':{printf("K");b++;break;}

case '2':{printf("L");b++;break;}

case '3':{printf("M");b++;break;}

case '4':{printf("N");b++;break;}

case '5':{printf("O");b++;break;}

case '6':{printf("P");b++;break;}

case '7':{printf("Q");b++;break;}

case '8':{printf("R");b++;break;}

case '9':{printf("S");b++;break;}

case '-':{printf("A");break;}

case '#':{printf("A");break;}

case '\0':{printf("A");break;}

}break;

}

case '2':{switch(s[b+1])

{

case '0':{printf("T");b++;break;}

case '1':{printf("U");b++;break;}

case '2':{printf("V");b++;break;}

case '3':{printf("W");b++;break;}

case '4':{printf("X");b++;break;}

case '5':{printf("Y");b++;break;}

case '6':{printf("Z");b++;break;}

case '-':{printf("B");break;}

case '#':{printf("B");break;}

case '\0':{printf("B");break;}

}break;

}

case '3':{printf("C");break;}

case '4':{printf("D");break;}

case '5':{printf("E");break;}

case '6':{printf("F");break;}

case '7':{printf("G");break;}

case '8':{printf("H");break;}

case '9':{printf("I");break;}

  }

}

printf("\n");   //换行

a--;

}while(a);

return 0;

}

 高级语言课程设计报告第五次报告: 字符串

 

3. 设计及调试过程遇到的问题及解决方案。

 NO PROBLEM

4.心得体会和自我对程序的评价。

 也就那么回事,毕竟做过,就当复习了。

定位符:

1.算法描述。

 //开始,到/或:为止输出中间的。

2.你的代码及注释。

#include <stdio.h>

#include <string.h>

#define n 10000

int main()

{

int c,b;

char s[n];

while(scanf("%s",s)!=EOF)

{

for(b=0;s[b]!='\0';b++)       //浏览

{

if(s[b]=='/'&&s[b+1]=='/')      //两个斜杠 开始

{

for(c=b+2;s[c]!='/'&&s[c]!=':';c++)    //斜杠或者冒号停止

{

printf("%c",s[c]);          //输出

}

printf("\n");

}

}

memset(s,0,10000);

};

}

 高级语言课程设计报告第五次报告: 字符串

 

3. 设计及调试过程遇到的问题及解决方案。

 就是那个冒号我不知道也是停止符,费了点时间,其他没了。

4.心得体会和自我对程序的评价。

 没什么体会,比较简单。程序就那样吧。