《C语言程序设计第三版》(苏小红)习题十 课后答案

本文介绍了使用C语言实现的字符串处理技巧,包括单词计数、字符删除与替换、插入空格、字符串逆序、连接字符串、字典序排序国名和星期几序号查找。通过实例展示了函数编程在处理文本数据中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

10.4  统计单词

输入一行字符,用函数编程统计其中有多少单词。假设单词之间以空格分开。

(把空格分开的数字、标点符号等 都当做单词)

#include<stdio.h> 
#include<ctype.h>
int words(char s[]){
	int i,sum=0,flag=0;
	for(i=0;s[i]!='\0';i++){
	
	  if(s[i]==' ')
	  flag=0;
	  else if(flag==0){
	  	flag=1;
	  	sum++;
		  }
	}
	
	return sum;
}
int main()
{
    char s[100];
    gets(s);
    int sum;
    sum=words(s);
    printf("这行字符有个单词%d",sum);
	return 0;
}

10.5   删除与某字符相同的字符

分别用字符数组或字符指针做函数参数,在字符串中删除与某字符相同的字符

#include<stdio.h> 

#include<ctype.h>
#include<string.h>
int Del1(char str[],char x){
	int i,j;
	for(i=0;i<strlen(str);i++){
		if(str[i]==x)
		{	
		for(j=i;j<strlen(str);j++)
		str[j]=str[j+1];	
	}
	}
}
void Del2(char *s,char x){
	char str[100];
	char *t=str;
	strcpy(t,s);
	for(;*t!='\0';t++){
		if(*t!=x){
			*s=*t;
			s++;
		}
	}
	*s='\0';	
} 
int main()
{

    char s[100],c;
    printf("请输入字符串:\n");
    gets(s);
    //puts(s);
    printf("输入要删除的字符:\n");

    c=getchar();
//    Del1(s,c);
    Del2(s,c);
    printf("删除后的字符串为%s\n",s);
	return 0;
}

10.6    字符间插入空格

分别用字符数组和字符指针作函数参数两种方法编程实现在字符串每个字符间插入一个空格的功能

#include<stdio.h> 
#include<ctype.h>
#include<string.h>
void Blank1(char s[]){
	int i;
	char b[255];
	int n=strlen(s);
	for(i=0;i<n;i++){
		b[2*i]=s[i];
		b[2*i+1]=' ';
	} 
	b[2*n]='\0';
	printf("加入空格后的字符串为:\n");
	puts(b);
}
void Blank2(char *s){
	int i,n;
	char b[255];
	n=strlen(s);
	for(i=0;i<n;i++){
		b[2*i]=*s++;
		b[2*i+1]=' ';
	} 
	b[2*n]='\0';
	printf("加入空格后的字符串为\n");
    puts(b);
}
int main()
{
    char s[100],c;
    printf("请输入字符串:\n");
    gets(s);
    Blank2(s);
	return 0;
}

10.7  字符串逆序存放

分别用字符数组和字符指针作为函数参数两种编程方法实现字符串逆序存放功能

#include<stdio.h> 
#include<ctype.h>
#include<string.h>
void Rev1(char s[]){
	int i,n;
	char t;
	n=strlen(s);
	for(i=0;i<n/2;i++){
		t=s[i];
		s[i]=s[n-i-1];
		s[n-i-1]=t;
	
	}
}
void Rev2(char *s){
	int i,n;
	char t;
	n=strlen(s);
	for(i=0;i<n/2;i++){
		t=*(s+i);
		*(s+i)=*(s+n-1-i);
		*(s+n-i-1)=t;
	}
} 
int main()
{
    char s[100],c;
    printf("请输入字符串:\n");
    gets(s);
    Rev2(s);
    printf("逆序后的字符串为:\n") ;
    puts(s);
	return 0;
}

10.8   实现字符串连接函数

不用返回指针的函数编程实现字符串连接函数strcat()的功能

#include<stdio.h> 
#include<ctype.h>
#include<string.h>
void Strcat(char *s,char *str){
	while(*s!='\0'){
		s++;
	}
	for(;*str!='\0';s++,str++){
		*s=*str;
	}
	*s='\0';
//	puts(s);
} 
int main()
{
   char s[100],str[100];
    printf("请输入字符串:\n");
    gets(s);
    printf("输入另一字符串:\n");
    gets(str);
    Strcat(s,str);
   printf("拼接后的字符串为:\n") ;
   puts(s);
	return 0;
}

10.9   字典序排列国名

输入5个国名,编程找出并输出字典排序在最前面的国名。

#include<stdio.h> 
#include<ctype.h>
#include<string.h>
#define Max 10
void SortString(char str[][Max],int n){
	int i,j;
	char temp[Max];
	for(i=0;i<n-1;i++){
		for(j=i+1;j<n;j++){
			if(strcmp(str[j],str[i])<0){
				strcpy(temp,str[i]);
				strcpy(str[i],str[j]);
				strcpy(str[j],temp);
			}
		}
	}
}
int main()
{
 int i,n=5;
    char name[5][Max];
    printf("输入国家名:\n");
	for(i=0;i<n;i++){
		gets(name[i]);
	}
	SortString(name,n);
	printf("排名在最前面的国家为:\n");
	puts(name[0]);
	printf("排序结果为:\n") ;
	for(i=0;i<n;i++){
		puts(name[i]);
	}
	return 0;
}

10.10  星期几的序号

任意输出英文的星期几,通过查找如图所示的星期表,输出相应的数字,若查到表尾,仍未找到,则输出错误提示信息。

#include<stdio.h> 
#include<ctype.h>
#include<string.h>
char WeekDay[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
void Week(char a[]){
	int t=0,i;
	for(i=0;i<7;i++){
		if(strcmp(WeekDay[i],a)==0)
		{
			t=1;
			puts(WeekDay[i]);
			break;
		}
	}
	if(t==1)
	printf("序号为:%d\n",i);
	else
	printf("请检查是否拼写正确\n"); 
}
int main()
{
	char a[10];
	printf("输入星期(英文:首字母大写):\n");
	gets(a);
	Week(a);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值