输入n串字符串,统计每串出现最多的字母

【问题描述】小民同学所在的班级有n名同学,这n名同学的姓名都是由小写英文字母组成的,这些同学的姓名中包含空格。现在小民想知道这n名同学的姓名中a-z哪个英文字母出现最多,其出现次数是多少?
【输入形式】
第1行为一个整数n,表示该班学生的人数。
下面为n行字符串(每行字符串不超过30个字符),表示n个同学的姓名。
【输出形式】
输出出现次数最多(相同则分行一起输出)的字母字符和次数,并用空格隔开。
【样例输入1】
1
zhang zhe
【样例输出1】
h 2
z 2
【样例输入2】
3
li hong
wang qiang
zhang tao
【样例输出2】
a 4
g 4
n 4

#include <iostream>
#include <string>
using namespace std;
int main(){
int i,j,rs,char name[100][100];
int xb[26]={0};
cin>>rs;//人数 
//循环输入rs个字符串 ,可读入空格 
for(i=0;i<rs;i++){
cin.getline(name[i],100); }
for(i=0;i<rs;i++)
    for(j=0;name[i][j]!="\n";j++)
      if(name[i][j]!=' ') //空格不管 
      xb[name[i][j]-'a']++;//下标为对应的ASCLL码值数组加1 

return 0;
} 

目前敲出来这么多,希望可以进行补充,如果有错帮指出,(我定义的是字符数组,可改用string类型的一维数组)有注释就更完美了,谢谢!!

修改如下,供参考:

#include <iostream>
#include <string>
using namespace std;
int main() {
    int i, j, rs, max;
    char name[100][100];
    int xb[26] = { 0 };
    cin >> rs;//人数 
    //循环输入rs个字符串 ,可读入空格 
    for (i = 0; i < rs; i++) {
        cin.ignore();
        cin.getline(name[i], 100);
    }
    for (i = 0; i < rs; i++)
        for (j = 0; name[i][j] != '\0'; j++)//for (j = 0; name[i][j] != "\n"; j++)
            if (name[i][j] >= 'a' && name[i][j] <= 'z')//if (name[i][j] != ' ') //空格不管 
                xb[name[i][j] - 'a']++;//下标为对应的ASCLL码值数组加1 
    max = xb[0];
    for (i = 1; i < 26; i++)
        if (max < xb[i]) max = xb[i];
    for (i = 0; i < 26; i++)
        if (xb[i] == max)
            cout << (char)(i + 'a') << " " << xb[i] << endl;
    return 0;
}

再改进下,少一次循环,供参考:

#include <iostream>
#include <string>
using namespace std;
int main() {
    int i, j, rs, max = 0;
    char name[100][100];
    int xb[26] = { 0 };
    cin >> rs;//人数 
    //循环输入rs个字符串 ,可读入空格 
    for (i = 0; i < rs; i++) {
        cin.ignore();
        cin.getline(name[i], 100);
    }
    for (i = 0; i < rs; i++)
    {
        for (j = 0; name[i][j] != '\0'; j++)
            if (name[i][j] >= 'a' && name[i][j] <= 'z') 
            { 
                xb[name[i][j] - 'a']++;
                if (max < xb[name[i][j] - 'a']) 
                    max = xb[name[i][j] - 'a'];
            }
    }
    for (i = 0; i < 26; i++)
        if (xb[i] == max)
            cout << (char)(i + 'a') << " " << xb[i] << endl;
    return 0;
}

你的代码是C++的,不是C 的。。。C的代码如下:

#include<iostream>
using namespace std;
typedef int Elemtype;
typedef struct LNode
{
    Elemtype data;
    struct LNode *next;
}LNode,*LinkList;
//尾插法
void CreateList(LinkList &L,int n)
{
    LNode *p;int i;
    LNode *r;
    L=new LNode;
    L->next=NULL;
    r=L;
    for(i=0;i<n;++i)
    {
        p=new LNode;
        cin>>p->data;
        p->next=NULL;
        r->next=p;
        r=p;
    }
}
//输出整个单链表
void display(LinkList L)
{ 
    LNode *p;
    p=L->next;
    cout<<"(";
    while(p)
    { 
        cout<<p->data<<" ";
        p=p->next;
    }
        cout<<")"<<endl;
}
#include <stdio.h>
int main()
{
    int i,j,maxnmb = 0,n,nmb[26]={0};
    char buf[30]={0};
    scanf("%d",&n);
    getchar();
    for (i=0;i<n;i++)
    {
        gets(buf);
        j = 0;
        while(buf[j] != '\0')
        {
            if(buf[j]== ' ')
            {
                j++;
                continue;
            }
            nmb[buf[j]-'a']++;
            if(nmb[buf[j]-'a'] > maxnmb)
                maxnmb = nmb[buf[j]-'a'];
            j++;
        }
    }
    for (i=0;i<26;i++)
    {
        if(nmb[i] == maxnmb)
            printf("%c %d\n",'a'+i,maxnmb);
    }
    printf("\n");
    return 0;
}