经典例题

经典例题(一)

统计一个字符串中每个字符出现的次数

例如:abacbdca
out:
a 3
b 2
c 2
d 1
方法:浪费空间换时间

#include <stdio.h>
void countwords(char s[],int a[])
{
 int i=0;
 while(s[i])
 {
  a[s[i]]++;//每个字符都对应有ASCII码值,以ASCII码值做下标
  i++;
 }
}
int main()
{
 char s[81];
 int i,a[256]={0};//ASCII码值共有256个
 printf("请输入一个字符串:\n");
 gets(s);
 countwords(s,a);
 for(i=0;i<256;i++)
  if(a[i]!=0)
   printf("%c %d\n",i,a[i]);
 return 0;
}

经典例题(二)

将一个字符串中的前k个字符逆转至字符串尾部

例如:abcXYZdefg (k=3)
out: XYZdefgabc
方法一:

#include <stdio.h>
int main()
{
 char s[81],t[81];
 int k;
 gets(s);
 scanf("%d",&k);
 strcpy(t,s+k);
 s[k]=0;//即s[k]='/0';
 strcat(t,s);
 puts(t);
 return 0;
}

方法二:

#include <stdio.h>
int main()
{
 char s[81];
 int k,i,j;
 gets(s);
 scanf("%d",&k);
 for(i=0;i<k;i++)
 {
  char ch=s[0];
  for(j=0;s[j];j++)
   s[j]=s[j+1];
  s[j-1]=ch;
 }
 puts(s);
 return 0;
}

方法三:三次逆转

#include <stdio.h>
#include <string.h>
void exchange(char s[],int n)
{
 int i,j;
 for(i=0,j=n-1;i<j;i++,j--)
 {
  char t;
  t=s[i];
  s[i]=s[j];
  s[j]=t;
 }
}
int main()
{
 char s[81];
 gets(s);
 int k,l;
 scanf("%d",&k);
 l=strlen(s);
 exchange(s,l);
 exchange(s,l-k);
 exchange(s+l-k,k);
 puts(s);
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值