黑马程序员技术交流社区
标题: **面试题**求字符串中A、B、C、D出现的次数,并按次数排序 [打印本页]
作者: 水木清华hm 时间: 2015-1-28 22:12
标题: **面试题**求字符串中A、B、C、D出现的次数,并按次数排序
#import <stdio.h>
// 定义一个主函数,作为程序的入口
int main()
{
// 定义一个数组array用来存放输入的字符串
char array[100];
// 提示输入一个字符串
printf("请输入一串字符串:\n");
// 接收输入的字符串,并赋值给数组array
scanf("%s",array);
// 定义两个变量用于for循环条件变量
int i,j;
// 定义四个变量用来存放ABCD出现的次数
int a = 0;
int b = 0;
int c = 0;
int d = 0;
// 定义变量length用来存放输入字符串的长度
unsigned long length = strlen(array);
// 定义for循环,当i小于字符串长度时,执行循环体,i加1
for (i = 0; i<length; i++) {
// 统计A出现的次数
if (array == 'A') {
a++;
}
// 统计B出现的次数
else if (array == 'B'){
b++;
}
// 统计C出现的次数
else if (array == 'C'){
c++;
}
// 统计D出现的次数
else if (array == 'D'){
d++;
}
}
// 定义一个数组x用来存放ABCD出现的次数
int x[4] = {a,b,c,d};
// 定义temp用于冒泡排序标记排序趟数
int temp;
// 冒泡排序 将a,b,c,d降序排序,i表示排序的趟数,j表示每趟排序的比较次数
for (i = 0; i<3; i++)
{
for(j = 0;j<3-i;j++)
{
if (x[j] < x[j+1])
{
// 当前一个元素小于后一个元素时,交换它们的位置
temp = x[j];
x[j] = x[j+1];
x[j+1] = temp;
}
}
}
// 定义一个数组y用来存放ABCD标志
char y[4];
// 将数组x与数组y的出现次数和标志一一对应
for (i = 0; i<4; i++)
{
// 如果出现a次,则y='A'
if(x == a && y[0] != 'A'&& y[1] != 'A' && y[2] != 'A' && y[3] != 'A')
{
y = 'A';
}
// 如果出现b次,则y='B'
else if(x == b && y[0] !='B' && y[1] != 'B' && y[2] != 'B' && y[3] != 'B')
{
y = 'B';
}
// 如果出现c次,则y='C'
else if(x == c && y[0] !='C' && y[1] != 'C' && y[2] != 'C' && y[3] != 'C')
{
y = 'C';
}
// 如果出现d次,则y='D'
else
{
y = 'D';
}
}
// 降序打印输出每个字母出现的次数
for (i = 0; i<4; i++)
printf("%c出现%d次\n",y,x);
return 0;
}
作者: peanutgao 时间: 2015-1-29 09:38
楼主,你确定你这代码可以编译通过;P
作者: 华少code 时间: 2015-1-29 10:30
好乱啊!
作者: 水木清华hm 时间: 2015-1-29 10:35
这是找的前几期的学长的,他们学能通过
作者: 水木清华hm 时间: 2015-1-29 10:36
因为是别人写的,我不会,也不敢乱改,有待优化
作者: peanutgao 时间: 2015-1-29 12:26
你可以在xcode运行下,应该会有好多错误
作者: 水木清华hm 时间: 2015-1-29 13:15
没有Xcode,只是给大家带来一点思路,抛砖引玉
作者: 水木清华hm 时间: 2015-1-29 13:17
不确定,仅限参考
作者: xiezhongmin 时间: 2015-1-30 13:03
感谢楼主的思路,下面是本人修改后的正确代码:
#include <stdio.h>
#include <string.h>
// 定义一个主函数,作为程序的入口
int main()
{
// 定义一个数组array用来存放输入的字符串
char array[100];
// 提示输入一个字符串
printf("请输入一串字符串:\n");
// 接收输入的字符串,并赋值给数组array
scanf("%s",array);
// 定义两个变量用于for循环条件变量
int i,j;
// 定义四个变量用来存放ABCD出现的次数
int a = 0;
int b = 0;
int c = 0;
int d = 0;
// 定义变量length用来存放输入字符串的长度
long lengths = strlen(array);
// 定义for循环,当i小于字符串长度时,执行循环体,i加1
for (i = 0; i<lengths; i++) {
// 统计A出现的次数
if (array[i] == 'A') {
a++;
}
// 统计B出现的次数
else if (array[i] == 'B'){
b++;
}
// 统计C出现的次数
else if (array[i] == 'C'){
c++;
}
// 统计D出现的次数
else if (array[i] == 'D'){
d++;
}
}
// 定义一个数组x用来存放ABCD出现的次数
int x[4] = {a,b,c,d};
// 定义temp用于冒泡排序标记排序趟数
int temp;
// 冒泡排序 将a,b,c,d降序排序,i表示排序的趟数,j表示每趟排序的比较次数
for (i = 0; i<3; i++)
{
for(j = 0;j<3-i;j++)
{
if (x[j] < x[j+1])
{
// 当前一个元素小于后一个元素时,交换它们的位置
temp = x[j];
x[j] = x[j+1];
x[j+1] = temp;
}
}
}
// 定义一个数组y用来存放ABCD标志
char y[4];
// 将数组x与数组y的出现次数和标志一一对应
for (i = 0; i<4; i++)
{
// 如果出现a次,则y='A'
if(x[i] == a )
{
y[i] = 'A';
}
// 如果出现b次,则y='B'
if(x[i] == b )
{
y[i] = 'B';
}
// 如果出现c次,则y='C' if(x[i] == c)
if(x[i] == c)
{
y[i] = 'C';
}
// 如果出现d次,则y='D'
if (x[i] == d)
{
y[i] = 'D';
}
printf("%c出现%d次\n",y[i],x[i]);
}
return 0;
}
没有做精简,若有更精简的代码请多多交流!!
作者: 1026238004 时间: 2015-1-30 13:20
顶顶!!!!
作者: 水木清华hm 时间: 2015-1-30 13:44
谢谢
作者: Zeus-S 时间: 2015-1-30 15:25
面试题?我的基础测试里面就有这道题,完全没思路,多谢分享
作者: 水木清华hm 时间: 2015-1-30 17:55
希望可以帮到你
作者: 萝莉最有爱 时间: 2015-1-30 18:25
学习了 受教了
作者: 水木清华hm 时间: 2015-1-31 18:17
希望可以对你有帮助
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |