第10章实验 字符串
- 题目9.3:
输入一行字符,用函数编程统计其中有多少个单词。假设单词之间以空格分开。
1、解题思路:
主函数中,定义一个字符最大可输入81个字符,printf输入一串字符,用gets可以带空格输入,num计数等于调用外层函数,输出words的个数。外层函数,字符串中第一个字符若不为空格,记i=1,进入循环,while控制直到最后一个字符为\0,num计数,返回个数。
2、源代码:
#include <stdio.h>
int CountWords(char str[]);
int main()
{
char str[81];
int num;
printf("Input a string:\n");
gets(str);
num=CountWords(str);
printf("Number of words=%d\n", num);
return 0;
}
int CountWords(char str[])
{
int i, num;
num = str[0] != ' ' ? 1 : 0;
i=1;
while (str[i]!='\0')
{
if(str[i]!=' ' && str[i-1] == ' ')
{
num++;
}
i++;
}
return num;
}
3、程序运行效果截图:
- 题目2:
参考例10.5,分别用字符数组和字符指针作函数参数两种方法编程实现字符串逆序存放功能。
- 解题思路:
使用两个字符数组,gets输入字符,调用外层函数交换位置,puts逆序输出。外层函数for循环计算字符个数,然后,for中p从0 开始,另一个从len-1开始,控制条件p小于字符个数,交换顺序,以’\0’结束。
2、源代码:
#include <stdio.h>
#define N 80
void Inverse(char str[],char End[]);
int main()
{
char str[N],End[N];
printf("Input a string:\n");
gets(str);
Inverse(str,End);
printf("The inversed string is:\n");
puts(End);
return 0;
}
void Inverse(char str[],char End[])
{
int len=0,i,j,p;
for (i=0;str[i]!='\0';i++)
{
len++;
}
for(p=0,j=len-1;p<len;p++,j--)
{
End[p]=str[j];
}
End[p]='\0';
}
3、程序运行效果截图:
- 、解题思路:
函数声明为指针类型,外层函数,指针初始化,定义一个char变量,用于交换,在定义用于交换后的指针。指针指向0,直到最后一个’\0’对字符串个数计数。Pstart从0来时,end从最后一个开始,控制条件自加个数小于自减个数,进入循环,指针交换,以’\0’结束外层函数。
2、源代码:
#include <stdio.h>
#include <string.h>
void Inverse(char *pStr);
int main()
{
char str[80];
printf("Input a string:\n");
gets(str);
Inverse(str);
printf("The inversed string is:\n");
puts(str);
return 0;
}
void Inverse(char *pStr)
{
int len = 0;
char temp;
char *pStart = pStr;
char *pEnd;
for (; *pStart!='\0'; pStart++)
{
len++;
}
for (pStart=pStr,pEnd=pStr+len-1; pStart<pEnd; pStart++,pEnd--)
{
temp = *pStart;
*pStart = *pEnd;
*pEnd = temp;
}
}
3、程序运行效果截图:
- 题目4:
任意输入英文的星期几,通过查找如图所示的星期表,输出其对应的数字,若查到表尾,仍未找到,则输出错误提示信息
- 解题思路:
头文件#include <string.h>,变量char为输入的字符串,gets输入,p等于从外层调用的星期为第几个数,写题目要求,判断p是否存在,输入星期正确,返回他的序数,否则Error。调用外层函数,二维变量写入星期,for循环直到,输入的星期在二维数组中存在break,返回序数,带回。
- 源代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Search(char x[7]);
int main()
{
char x[7],p;
printf("weekday:");
gets(x);
p=Search(x);
if(p<7)
printf("%d\n",p);
else
printf("Error");
return 0;
}
int Search(char x[])
{
int i;
char day[7][20]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
for(i=0;i<7;i++)
{
if(strcmp(day[i],x)==0)
break;
}
return i;
}
3、程序运行效果截图:
- MOOC网课程测试结果:
1、测试1:
六、实验心得与总结:
对于本章的学习,有懂的地方,也有不懂得地方,通过自己再一次的看书,以及舍友的帮助,我对字符串的使用更加清晰,通过做习题,实践,我对理论知识进行实践,会让我更能明白字符串。