实验九 字符串
实验目的
1.掌握字符串的访问和输入输出方法
2.掌握字符串处理函数的应用
3.掌握向函数传递字符串的方法
4.掌握从函数返回字符指针的方法
实验条件:
PC 计算机,Windows7 或 Windows10 操作系统,Office2010 及以上版本,
Dev-C++5.11 及以上版本或 Code Blocks16.01 及以上版本。
实验内容
1.程序调试
找最小的字符串:输入 5 个字符串,输出其中最小的字符串。
源程序(有错误)
#include<stdio.h>
#include<string.h>
int main()
{
int i;
char str[80],
min[80];
printf("Input 5 strings:\n");
scanf("%s", str);
min=str;
for(i=1; i<5; i++){
//调试时设置断点
scanf("%s", str);
if(min>str){
min=str;
}
}
printf("Min is: %s", min);
return 0;}
程序清单如下:
#include<stdio.h>
#include<string.h>
int main()
{
int i;
char str[80],
min[80];
printf("Input 5 strings:\n");
scanf("%s", str);
strcpy(min,str);
for(i=1; i<5; i++){
//调试时设置断点
scanf("%s",str);
if(strcmp(min, str)>0){
strcpy(min,str);
}
}
printf("Min is: %s", min);
return 0;
}
该程序的运行结果如图一所示:
图一
2.基础编程
(1)假设字符串内字符数不超过 80 个,利用指针编程,统计给定字符串中
大写字母、小写字母和其他字符分别有多少个。要求用函数实现功能,主程序只
完成数据的输入输出。
函数原型:
void StatChar(char *str, int *capital, int *lowcase, int *other);
void StatChar(char str[], int *capital, int *lowcase, int *other);
输入提示信息:"Input string:\n"输入格式:
用 gets()函数
输出格式:” capital:%d, lowcase:%d, other:%d\n”
运行样例
Input
string:
I can
play
the piano.↙
capital:1,
lowcase:15, other:5
程序清单如下:
#include<stdio.h>
void StatChar(char *str, int *capital, int *lowcase,
int
*other);
int main()
{
char str[80];
int capital=0,lowcase=0,other=0;
printf("Input string:\n");
gets(str);
StatChar(str,&capital,&lowcase,&other);
printf(" capital:%d, lowcase:%d,other:%d\n",capital,lowcase,other);
return 0;
}
void StatChar(char *str, int *capital, int *lowcase, int *other)
{
while(*str!='\0')
{
if((*str>='A')&&(*str<='Z'))
{
(*capital)++;
}
else if((*str>='a')&&(*str<='z'))
{
(*lowcase)++;
}
else
{
(*other)++;
}
str++;
}
}
该程序的运行结果如图二所示:
图二
(2)假设字符串内字符数不超过 80 个,分别用字符数组和字符指针做函数
参数两种方法实现下述功能:在字符串中删除与某字符相同的字符。
函数原型:
void DelChar(char *str, char ch)
void DelChar(char str[ ] , char ch)
输入提示信息:“Input string:\n”
“Character to be deleted:\n”
输入格式:
用 gets()函数
输出格式:”%s”
运行样例
Input string:
you are my sunshine.↙
Character
to be deleted:
e↙
you ar my
sunshin.
程序清单如下(使用指针):
#include<stdio.h>
void DelChar(char *str,
char ch);
int main()
{
char str[80],ch;
printf("Input string:\n");
gets(str);
printf("Character to be deleted:\n");
scanf("%c",&ch);
DelChar(str,ch);
printf("%s",str);
return 0;
}
void DelChar(char *str, char ch)
{
char *p;
while(*str!='\0'){
if(*str==ch)
{
p=str;
while(*str!='\0')
{
*str=*(str+1);
str++;
}
str=p;
}
str++;
}
}
该程序的运行结果如图三所示:
图三
程序清单如下(使用数组):
#include<stdio.h>
void DelChar(char str[ ] ,
char ch);
int main()
{
char str[80],ch;
printf("Input string:\n");
gets(str);
printf("Character to be deleted:\n");
scanf("%c",&ch);
DelChar(str,ch);
printf("%s",str);
return 0;
}
void DelChar(char str[ ] , char ch)
{
int k=0;
int i=0;
while(str[i]!='\0')
{
if(str[i]==ch)
{
k=i;
do
{
str[i]=str[i+1];
i++;
}while(str[i]!='\0');
i=k;
}
i++;
}
}
该程序的运行结果如图四所示:
图四