|
本帖最后由 topdog 于 2021-1-24 15:04 编辑
设问串口接收一串字符串,要求打印出全部字符串,统计一共有几个整数,找出最大的整数数值,这个数字在字符串中的位置。
1,串口接收单个的字符,把它们连接成字符串inputString。
2,do-while循环与while循环的不同在于:它会先执行循环体,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次循环体。
3,字符串处理函数myString.indexOf(),在一个字符串中查找一个字符或字符串的索引。默认情况下,搜索从字符串的开头开始,但也可以从给定的索引开始,从而允许至尾端查找字符或字符串的所在索引。myString.indexOf(val, from),小括号里val是查找条件, 题目里给出的空格。from开始搜索的索引。缺省值零。字符串中val的索引,如果没有找到则为-1。
4,字符串处理函数myString.substring(A,B),获取字符串的子字符串。起始索引A是包含性的(对应字符包含在子字符串中),但是可选的结束索引B是独占性的(对应字符不包含在子字符串中)。如果省略了结束索引,则子字符串将继续到字符串的末尾。
5,字符串处理函数myString.toInt()将有效字符串转换为整数。输入字符串应该以一个整数开始。如果字符串包含非整数,函数将停止执行转换。
6,例如:809,66,829,432,113,971,338,816,590,238,358,330,636,867, 为了看清楚空格位置用逗号标注。SpaceIndex = inputString.indexOf(', ')给出第一个逗号的序列值,然后inputString.substring(0, SpaceIndex).toInt() 第一截取字符串,第二把它转化成整数,再次,去除809形成新的字符串inputString.substring(SpaceIndex + 1)。如此循环直到尾端。特别强调867后面有个逗号,如果是空格的话请不要忘记输入。
7,请注意程序首部是全局变量,在loop花括号里面的是局部变量,运行结束都要清零呦。
[pre]String inputString = "";
bool Status = false;
void setup()
{
Serial.begin(9600);
inputString.reserve(200);
Serial.println("Please input");
}
void loop()
{
int SpaceNum = 0;
int Max = 0;
int MaxPosition = 0;
int Position = 0;
int SpaceIndex = 0;
if (Status)
{
Serial.println(inputString);
do
{
SpaceIndex = inputString.indexOf(' ');
if (SpaceIndex != -1)
{
SpaceNum = inputString.substring(0, SpaceIndex).toInt();
inputString = inputString.substring(SpaceIndex + 1);
++Position;
if (SpaceNum > Max)
{
Max = SpaceNum;
MaxPosition = Position;
}
}
else
{
Serial.print("Size of input data = ");
Serial.print(Position);
Serial.println(" integers");
Serial.print("Max = ");
Serial.println(Max);
Serial.print("Max position = ");
Serial.println(MaxPosition);
Serial.println(" ");
Serial.println("Please input");
inputString = "";
Serial.flush();
Status = false;
}
} while (inputString.length() > 0);
}
}
void serialEvent()
{
if (Serial.available())
{
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n')
{
Status = true;
}
}
}[/pre]
|
|