7-1 数字 (30 分)
Drizzle 收到一封英文信件,信件中的句子仅由若干单词和数字组成,每个单词,数字之间用单个空格隔开,请你取出其中的所有数字,并判断数字是否递增 。 如果递增,输出 True ,否则,输出 False 。
要求:输入:一行字符串表示句子 s
输出:True
或 False
输入:
1 box has 3 blue 4 red 6 green and 12 yellow marbles
输出:
True
解释:
句子中的数字是:1, 3, 4, 6, 12 。
这些数字是按从左到右严格递增的 1 < 3 < 4 < 6 < 12 。
- 3 <= s.length <= 200
- s 由小写英文字母、空格和数字 0 到 9 组成(包含 0 和 9)
- s 中数字的数目在 2 和 100 之间(包含 2 和 100)
- s 中至少有 两个 数字
- s 中的每个数字都是一个 小于 100 的 正 数,且不含前导零
- s 不含前导或尾随空格
#include
#include
#define bool char
#define true 1
#define false 0
#define MAXLEN 255
//定义串的结构, 需要一个存放字符串的数组和表示它长度的变量
typedef struct
{
char ch[MAXLEN+1];
int length;
} SString;
//初始化串,很简单,只需要把长度设为0就可以了
void StrInit(SString* S)
{
S->length = 0;
}
//串赋值
bool StrAssign(SString* T, char* ch)
{
//判断ch是否为空,空的话就不需要赋值了
if(ch == NULL) return false;
//将字符串里的字符依次输入到串中
int i = 0, j = 1;
while(ch[i] != '\0')
{
//如果Ascii码在0~9范围内,说明是数字,输入到串
if(ch[i] >= 48 && ch[i] <= 57)
{
T->ch[j++] = ch[i];
}
//不然的话全换成空格
else
{
T->ch[j++] = ' ';
}
i++;
}
T->length = j-1;
return true;
}
//输出串,测试用
bool PrintStr(SString S)
{
//如果为空不输出
if(S.length == 0) return true;
for(int i = 1; i <= S.length; i++)
{
printf("%c", S.ch[i]);
}
printf("\n");
return true;
}
//提取数, S是串, pos是数字开始的位置, k是数字的长度, 返回m是数字
int StractMath(SString S, int pos, int *k)
{
int m = 0;
int i = 1;
while(S.ch[pos] !=' ' && i <= S.length)
{
//把连续的单个数字(字符类型)转换为整个数字(整形)
//-48是因为ascii码
m = m*10 + S.ch[pos]-48;
pos++;
i++;
}
*k = i-1;
return m;
}
//判断串中元素是否按顺序排列
bool Queue(SString S)
{
//空的就不管了
if(S.length == 0) return false;
//m、n用来作比较,设初值为负数是为了防止跟串里的数相等,
//len用来存数字的长度
int m = -1, n = -1, len;
for(int i = 1; i <= S.length; i++)
{
//如果是数字的范围
if(S.ch[i] >= 48 && S.ch[i] <= 57)
{
//n存m原来的值,跟下一个m值作比较
n = m;
m = StractMath(S, i, &len);
//让i的位置跳过数字的范围
i += len;
//如果m 小于等于n说明不是顺序排列的
if(m <= n)
{
//printf("%d %d\n", m,n);//测试用
return false;
}
}
}
//一直到最后都没弹出说明是按顺序排列的。
return true;
}
int main()
{
//初始化
SString S;
StrInit(&S);
//先把字符串搞到字符数组里
char str[300];
gets(str);
//再把字符串中的数字弄到串里,不是数字的变成空格
StrAssign(&S, str);
//PrintStr(S);//测试用
//按照提议返回
if(Queue(S))
{
printf("True");
}
else
printf("False");
//若对您有帮助请点个赞哦~
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)