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;
}