Skip to content

Problem set 2

scrabble

  • 需要转换大小写(通过ASII码的加减)
    再对每个字母进行赋值(用到了两个数组,一个储存字母一个储存数字)
    其中需要注意对标点符号这类的非字母数据进行赋值归零
    用到了strlen函数<sring.h>,用来获取数组长度,其中数据类型为size_t!
#include <stdio.h>
#include <cs50.h>
#include <string.h>
int cal_sum(string l,size_t s,int k[]);
void add_value(string l,size_t s,int k[]);
int main()
{
string p1 = get_string("Player 1:");
string p2 = get_string("Player 2:");
//输入两组
size_t length1 = strlen(p1);
size_t length2 = strlen(p2);
int values1[length1];
int values2[length2];
int i;
for(i=0;i<length1;i++)
{
if(p1[i]>='a' && p1[i]<='z')
{
p1[i] = p1[i]-32;
}
}
for(i=0;i<length2;i++)
{
if(p2[i]>='a' && p2[i]<='z')
{
p2[i] = p2[i]-32;
}
}
add_value(p1,length1,values1);
add_value(p2,length2,values2);
int sum1 = cal_sum(p1,length1,values1);
int sum2 = cal_sum(p2,length2,values2);
//赋值
if(sum1>sum2)
{
printf("Player 1 wins!\n");
}
else if(sum1<sum2)
{
printf("Player 2 wins!\n");
}
else
{
printf("Tie!\n");
}
//开始比较
//打印胜者
}
void add_value(string l,size_t s,int k[])
{
int i;
for(i = 0;i<s;i++)
if(l[i] == 'A')
{
k[i] = 1;
}
else if(l[i] == 'B')
{
k[i] = 3;
}
else if(l[i] == 'C')
{
k[i] = 3;
}
else if(l[i] == 'D' )
{
k[i] = 2;
}
else if(l[i] == 'E' )
{
k[i] =1;
}else if(l[i] == 'F')
{
k[i] =4;
}else if(l[i] == 'G')
{
k[i] =2;
}else if(l[i] == 'H')
{
k[i] =4;
}else if(l[i] == 'I')
{
k[i] =1;
}else if(l[i] == 'J')
{
k[i] =8;
}else if(l[i] == 'K')
{
k[i] =5;
}else if(l[i] == 'L')
{
k[i] =1;
}else if(l[i] == 'M')
{
k[i] =3;
}
else if(l[i] == 'N')
{
k[i] =1;
}else if(l[i] == 'O')
{
k[i] =1;
}else if(l[i] == 'P')
{
k[i] =3;
}else if(l[i] == 'Q')
{
k[i] =10;
}else if(l[i] == 'R')
{
k[i] =1;
}else if(l[i] == 'S')
{
k[i] =1;
}else if(l[i] == 'T')
{
k[i] =1;
}else if(l[i] == 'U')
{
k[i] =1;
}else if(l[i] == 'V')
{
k[i] =4;
}else if(l[i] == 'W')
{
k[i] =4;
}else if(l[i] == 'X')
{
k[i] =8;
}else if(l[i] == 'Y')
{
k[i] =4;
}
else if(l[i] == 'Z')
{
k[i] =10;
}
else
{
k[i] =0;
}
}
int cal_sum(string l,size_t s,int k[])
{
int sum = 0;
int i;
for(i=0;i<s;i++)
{
sum = sum+k[i];
}
return sum;
}

Readability

  • 新用到了<ctype.h>的函数,可以用来判断字母、数字、标点符号,甚至是空格。
    还新用到了<math.h>中的round函数,用来四舍五入
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
int main()
{
string sentence = get_string("text:");
//输入一段句子
size_t length = strlen(sentence);
int sum_alpha = 0;
int sum_words = 1;
int sum_sentence = 0;
for(int i=0;i<length;i++)
{
if(isalpha(sentence[i]))
{
sum_alpha++;
}
else if(isspace(sentence[i]))
{
sum_words++;
}
else if(sentence[i] == '!' || sentence[i] == '?' || sentence[i] == '.')
{
sum_sentence++;
}
}
//字母数量,词语数量(找空格数量)
float index = (5.88*sum_alpha)/sum_words - (29.6*sum_sentence)/sum_words - 15.8;
int index1 = round(index);
//计算
if(index1 < 1)
{
printf("Before Grade 1\n");
}
else if(index1 >=16)
{
printf("Grade 16+\n");
}
else
{
printf("Grade %i\n",index1);
}
//根据条件设置打印情况
}