经典例题(一)
统计一个字符串中每个字符出现的次数
例如: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;
}