7-1 统计一行文本的单词个数
#include<stdio.h>
#include<string.h>
int main()
{
char s[1001];
gets(s);
int pos=0;
for(register int i=0;i<strlen(s);i++)
{
if(s[i]!=' ')
{
pos=1;
}
}
if(pos==0)//如果全是空格
{
printf("0");
return 0;
}
int ans=1,flag=1;//flag是为了排除连续空格情况
for(register int i=0;i<strlen(s);i++)
{
if(s[i]==' '&&flag==0)
{
ans++;
flag=1;
}
else//可删去
{
if(s[i]!=' '&&flag==1)
{
flag=0;
}
}
}
if(flag==1)//特判如果是以空格结尾
{
ans--;
}
printf("%d",ans);
return 0;
}
7-2 选择法排序
#include<stdio.h>
int main()
{
int n,a[1001];
scanf("%d",&n);
for(register int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(register int i=1;i<=n;i++)
{
int maxn=-100000,pos;
for(register int j=i;j<=n;j++)//找到剩余项中的最大项
{
if(a[j]>maxn)
{
maxn=a[j];
pos=j;//记录下标
}
}
int t;//通过数组元素互换将最大项插入数组中
t=a[i];
a[i]=maxn;
a[pos]=t;
}
for(register int i=1;i<n;i++)
{
printf("%d ",a[i]);
}
printf("%d",a[n]);
return 0;
}
7-4 删除重复字符
#include<stdio.h>
#include<string.h>
int main()
{
char s[1001];
int a[1001]={0},maxn=0;
gets(s);
for(register int i=0;i<=strlen(s);i++)
{
a[(s[i]-0)]++;//记录字符出现的次数
if((s[i]-0)>maxn)
{
maxn=s[i]-0;//记录范围方便下一个循环
}
}
for(register int i=1;i<=maxn;i++)
{
//printf("%d\n",a[i]);
if(a[i]!=0)//只要出现都只输出一次
{
printf("%c",i);//强制类型转换,i是ASCLL码
}
}
return 0;
}
7-5 字符串的冒泡排序
#include<stdio.h>
#include<string.h>
int main()
{
int n,k;
char s[1001][1001];
scanf("%d %d",&n,&k);
getchar();
for(register int i=1;i<=n;i++)
{
gets(s[i]);
}
for(register int i=1;i<=k;i++)//只进行k轮
{
for(register int j=1;j<=(n-i);j++)
{
if(strcmp(s[j],s[j+1])>0)//字符串比较函数
{
char ss[1001];//交换两个字符串
strcpy(ss,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],ss);
}
}
}
for(register int i=1;i<=n;i