C语言:(用第一种则会按ASCII码表的顺序打印出现的字符次数)
#include<stdio.h>
int main()
{
const char* str="I am a good guy";
int i=0;
int a[128]={0};
while(str[i])
{
a[str[i]]++;
i++;
}
for(i=0;i<128;i++)
{
if(a[i])
cout<<(char)i<<":"<<a[i]<<endl;
}
return 0;
}
c++:(第二种方法按照字符串出现的先后顺序打印字符)
#include <iostream>
using namespace std;
struct node
{
char ch; // 字符
int times; // 出现的次数
node* next;
};
node head={0};
void add(const char ch)
{
node* obj=new node;
obj->ch=ch;
obj->times=1;
obj->next=NULL;
node* p=&head;
while(p->next)
{
p=p->next;
}
p->next=obj;
}
node* fine(const char ch)
{
node* p=head.next;
while(p)
{
if(p->ch==ch)
return p;
p=p->next;
}
return NULL;
}
void show()
{
node* p=head.next;
while(p)
{
cout<<p->ch<<":"<<p->times<<endl;
p=p->next;
}
}
void discard()
{
node* p=head.next;
while(p)
{
node* q=p;
p=p->next;
delete q;
}
}
int main()
{
const char* str="I am a good guy";
const char* p=str;
while(*p)
{
char ch=*p;
if(ch==' ')
{
p++;
continue;
}
node* ret=fine(ch);
if(ret)
ret->times++;
else
add(ch);
p++;
}
show();
discard();
return 0;
}