跳转到内容

A-level 计算机/AQA/试卷 1/编程基础/字符串处理

来自维基教科书,开放的书籍,开放的世界

字符串处理函数

[编辑 | 编辑源代码]

非常流行的考试问题涉及字符串操作。这些简单的函数将帮助您完成此任务。

此函数用于查找传递给它的任何字符串的长度,包括所有字符,包括空格。在 Visual Basic 中,要查找字符串的长度,我们使用 Len("some string") 函数,该函数返回传递给它的字符串的整数长度

someText = "Gary had a little lamb"
Console.writeline(Len(someText))
   代码输出

22


此函数允许我们查找给定字符串中项目的的位置,并返回该位置的位置。在 Visual Basic 中,这是通过以下命令执行的:InStr([string], [item]) 例如,我们可能想通过查找句号来查找句子的结尾位置

someText = "Gary had a little lamb. His fleece was white as snow."
Console.writeline(InStr(someText,"."))
   代码输出

23

我们也可以使用此命令在字符串中搜索字符串。例如,如果我们要查找句子是否包含某个名称

someText = "Gary had a little lamb. Dave's fleece was white as snow."
Console.writeline(InStr(someText,"Dave"))
   代码输出

25

如果搜索项不包含在字符串中,它将返回 0

someText = "Gary had a little lamb. Dave's fleece was white as snow."
Console.writeline(InStr(someText,"Julie"))
   代码输出

0


子字符串

[编辑 | 编辑源代码]

此函数允许您从字符串中剪切项目并返回子字符串。Visual Basic 使用以下命令:[string].Substring([startPosition],[lengthOfReturnString])。例如,我们可能想从给定的固定电话号码中查找本地号码。我们必须忽略区号

phone = "(01234)567890"
local = phone.Substring(7, 6)
console.writeline(local)
   代码输出

567890


此函数允许您将字符串粘贴在一起(连接),以便您可以开始使用变量构建字符串。Visual Basic 使用以下命令:[stringA & stringB] 例如,我们可能在变量 dim name as string 中存储了用户的姓名,以及我们想给予他们的问候

name = "Charles"
console.writeline("Hello " & name & ". How are you today?")
   代码输出

您好,查尔斯。今天过得怎么样?


字符串转换函数

[编辑 | 编辑源代码]

当您声明变量时,您会为它提供一个数据类型。此数据类型限制了您可以放入变量的值。例如

dim age as integer
将允许:age = 34
将不允许:age = "cabbages"

这似乎很有意义,但当您尝试将实数放入整数中时会发生什么

dim age as integer
age = 34.3
console.writeline(age)
   代码输出

34

这似乎没问题,但在其他语言中我们可能会遇到麻烦。要执行此操作,我们必须从一种数据类型转换为另一种数据类型

dim age as decimal
age = 34.3
console.writeline(age)
age = CInt(34.3) 'converts the decimal into an integer
console.writeline(age)
   代码输出

34.3 34


练习:字符串函数

编写一个简短的程序来告诉某人他们名字中有多少个字母(以防他们不知道!),例如

   代码输出

输入:弗莱姆林
您好,弗莱姆林,您的名字中有 7 个字母。

答案

  Dim name As String
  console.write("Input: ")
  name = console.readline()
  console.writeline("Hello " & name & " you have " & Len(name) & " letters in your name.")


有些人愚蠢地将他们的名字和姓氏输入了数据库,写一些代码来显示名字,然后是他们的姓氏

dim fistname as string = "Elizabeth Sheerin"
   代码输出

输入:伊丽莎白·希林
名字:伊丽莎白
姓氏:希林

答案

        Dim name As String = "Elizabeth Sheerin"
        Dim firstname, secondname As String
        Dim space, textlength As Integer

        space = InStr(name, " ")
        textlength = Len(name)

        firstname = name.Substring(0, space)
        secondname = name.Substring(space, textlength - space)

        Console.WriteLine("first name is: " & firstname)

        Console.WriteLine("second name is: " & secondname)


电话号码已作为字符串输入计算机:(01234)567890

dim phonenum as string = "(01234)567890"

编写一些代码以输出没有括号的号码

   代码输出

输入:(01234)567890
输出:01234567890

答案

        Dim phonenum As String = "(01234)567890"
        Dim firstbracket, secondbracket As String
        Dim textlength, arealength As Integer

        firstbracket = InStr(phonenum, "(")
        secondbracket = InStr(phonenum, ")")
        textlength = Len(phonenum)
        arealength = secondbracket - firstbracket

        Console.Write(phonenum.Substring(firstbracket, arealength - 1) & phonenum.Substring(secondbracket, textlength - secondbracket))


与上面类似的问题,电话号码目前以非常难以理解的格式存储:01234567890,完全缺少区号。您可以将它们转换为显示前 5 位数字为区号吗?

dim phonenum as string = "01234567890"

然后应将其输出为

   代码输出

输入:01234567890
输出:(01234)567890

答案

        Dim phonenum As String = "01234567890"
        Console.Write("(" & phonenum.Substring(0, 5) & ")" & phonenum.Substring(6, 5))
        Console.ReadLine()


一个回文是一个词、短语或数字,无论从哪个方向读都是一样的。例如 1234321、RACECAR、TOOT 和 NUN。您需要编写一个程序来检查给定的任何输入是否为回文,并让用户知道

   代码输出

输入:NUN
这是一个回文!
输入:nune
这不是回文

答案

  Dim name As String
  Dim length As Integer
  Dim Pal As Boolean = TRUE
  console.write("Input: ")
  name = console.readline()
  length = Len(name)
  For x = 0 to (length / 2)
    If name.Substring(x, 1) != name.Substring(length - x, 1) then
       Pal = FALSE
    End If
  Next
  
  If Pal then
    console.writeline("That is a palindrome!")
  Else
    console.writeline("That is NOT a palindrome!")
  End If


扩展:正则表达式

您通常希望检查输入字符串的格式,如果格式不正确,您希望它重新提交。例如,您可能希望某人输入他们最好的朋友的名字,这意味着他们不应该输入任何字母或空格,并且它应该以大写字母开头

   代码输出

最好的朋友的名字:Beanie(正确)
最好的朋友的名字:jonny5(停止)

为此,我们可以将输入字符串与一些规则匹配,正则表达式或正则表达式,在这种情况下,我们只希望字母表中的字符

[A-Z][a-z]+

拆分规则

  • [A-Z] - 以一个大写字母开头
  • [a-z]+ - 后面可以接任意多个小写字母(这就是 + 的意思)

另一个例子可能是检查著名作曲家的拼写是否正确

"Handel", "Händel", and "Haendel"

我们可以使用模式 H(ä|ae?)ndel 检查它。让我们看看这意味着什么

  • H - 以 H 开头
  • (ä|ae?) - 包括 ä 或(| 符号)一个 a 后面跟着一个可选的 ee? 表示 e 是可选的)

大多数正则表达式工具提供以下操作来构建表达式。

布尔“或”

垂直线分隔备选方案。例如,gray|grey 可以匹配“gray”或“grey”。

分组

括号用于定义运算符的范围和优先级(以及其他用途)。例如,gray|greygr(a|e)y 是等效模式,它们都描述了“gray”和“grey”的集合。

量化

在标记(如字符)或组后面的量词指定前面元素允许出现的次数。

  • ? 问号表示前面元素有零个或一个。例如,colou?r 匹配“color”和“colour”。
  • * 星号表示前面元素有零个或多个。例如,ab*c 匹配“ac”、“abc”、“abbc”、“abbbc”等等。
  • + 加号表示前面元素有一个或多个。例如,ab+c 匹配“abc”、“abbc”、“abbbc”等等,但不匹配“ac”。

大多数编程语言都有正则表达式函数。在 VB.NET 中,我们可以使用 Regex 例程使用正则表达式

' this code enforces the name rule from earlier
Dim name As String
Console.Write("Name of best friend: ")
name = Console.Readline()

' match the string against a regular expression
Dim m As Match = Regex.Match(name, "[A-Z][a-z]+")

If (m.Success) Then
    Console.WriteLine("You have input the name correctly")
Else
    Console.WriteLine("Incorrect format!")
End If

正则表达式的常见用途是检查您是否输入了正确的电子邮件地址。该规则如下:^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$

您可以在维基百科上找到有关正则表达式的更多信息,您将在 A2 中更详细地学习正则表达式。

从整数、实数、日期/时间转换。

华夏公益教科书