C语言题目
编写函数int mystrlen(char *s),计算字符串的串长并返回;编写函数cov (char *s),功能是将字符串倒置;编写main()函数,输入一个字符串,调用mystrlen函数,输出串长,调用cov函数,将倒置后的字符串输出。
解题思路
总共三个函数,一为主函数main(),二为mystrlen(char *s),三为cov(char *s)。
对于主函数main,先定义一个字符串变量并输入:
char str;
scanf("%s",&str);
调用mystrlen函数直接输出:
printf("Len=%d\n",mystrlen(&str));
调用cov函数:
cov(&str);
还有,不要忘了是否需要return?这个按照个人喜好定义main函数(可能是int,也可能是void的……),int main自然需要return 0;即:
return 0;
进入到mystrlen函数的编写中,这里就是简单的字符串长度计算罢了,所以在此自定义函数中直接把传入的*s=&str的 s 当做字符数组使用,然后再直接遍历,运用字符串存于字符数组的特征’\0’来判断字符串的结束与否,并引入变量记录长度,然后直接返回变量i:
int i;
for(i=0;s[i]!='\0';i++){}
return i;
再就是倒置字符串函数cov,思考一下如何进行倒置?还是一样将传入的str作为字符数组s[i]进行处理,运用对称性首尾进行交换,而后依次对称向内遍历直至下标遍历到字符数组下标的中间位置(这里叙述有些模糊,不如直接上代码看看就知道了),重中之重的就是字符的交换!!!此处用了中间变量存储需要交换的字符,然后依次交换:
char k;
int i;
for(i=0;i<=mystrlen(s);i++)
{
k=s[i];
s[i]=s[mystrlen(s)-1-i];
s[mystrlen(s)-1-i]=k;
}
printf("%s\n",s);
上述的k即为中间变量,用于存储需要交换的字符,i为遍历时所需的下标,其中为了方便直接调用了mystrlen函数,是计算了s字符串长度(注意:mystrlen计算所得的长度是字符串总长度,区别于字符数组的下标,下标应为0~mystrlen(s)-1),所以应用对称性,下标 i 所对称的下标应为 mystrlen(s)-1-i,这里需要仔细思考一下。
数组元素交换就不必多说了……
以上便完成了此题的主要内容,剩下的可看下面的代码实践思考分析。
初步代码实践
#include<stdio.h>
int mystrlen(char *s)
{
int i;
for(i=0;s[i]!='\0';i++){}
return i;
}
void cov(char *s)
{
char k;
int i;
for(i=0;i<=mystrlen(s)/2;i++)
{
k=s[i];
s[i]=s[mystrlen(s)-1-i];
s[mystrlen(s)-1-i]=k;
}
printf("%s\n",s);
}
int main()
{
char str;
scanf("%s",&str);
printf("Len=%d\n",mystrlen(&str));
cov(&str);
return 0;
}
代码优化/进阶
待补充……
将于评论区征集……
暂无评论内容