TI-BASIC:Instring
Command Summary
Finds the first occurrence of a search string in a larger string.
Command Syntax
inString(haystack, needle, starting point)
Menu Location
This command can only be found in the Catalog. Press:
- 2nd CATALOG to access the command catalog
- I to skip to command starting with I
- scroll down to find inString( and select it
TI-83/84/+/SE
2 bytes
The inString( command searches a string for occurrences of a smaller string (similar to the Find feature on a computer), and returns the first such occurrence.
The source string is the string you want to search through; the search string is the substring you want to find. inString( will return the index of the first letter of the first occurrence of the search string found, or 0 if the search string is not present. For example:
:inString("TI-BASIC","BASIC 4 :inString("TI-BASIC","TI 1 :inString("TI-BASIC","I 2 :inString("TI-BASIC","ELEPHANT 0
You can also provide the optional starting point argument, 1 by default, that will tell the command where it should start looking. If you provide a value higher than 1 here, the command will skip the beginning of the string. This can be used to find where the search string occurs past the first occurrence. For example:
:inString("TI-BASIC","I 2 :inString("TI-BASIC","I",2 2 :inString("TI-BASIC","I",3 7
Advanced Uses
You can use inString( to convert a character to a number. For example:
:inString("ABCDEFGHIJKLMNOPQRSTUVWXYZ",Str1→N
Assuming Str1 is one character long and contains a capital letter, N will hold a value of 1-26 that corresponds to that letter. This value can then be stored in a real number, list, or matrix, where a character of a string couldn't be stored. To get the character value of the number, you can use the Sub( command:
:sub("ABCDEFGHIJKLMNOPQRSTUVWXYZ",N,1→Str1
Using the starting point argument of inString(, you can write a routine to return all occurrences of the search string in the source string:
:0→dim(L1 :inString(Str0,Str1 :Repeat not(Ans :Ans→L1(1+dim(L1 :inString(Str0,Str1,Ans+1 :End
If the search string is not found, this routine will return {0} in L1. If it is found, the result will be a list of all the places the string was found.
Optimization
The inString( command can replace checking if a string is one of a number of values. Just put all the values in a string, one after the other, and try to find the string to be checked in the string of those values:
:If Str1="." or Str1=", can be :If inString(".,",Str1
Be careful, because if Str1 were ".," in the above example, this would also be treated like "." or ",". If this is a problem, you can separate the values you want to check for by a character you know can't be in the string:
:If Str1="HELLO" or Str1="HI can be :If inString("HELLO,HI",Str1
(assuming a comma would never be in Str1, and words like "HELL" or "I" are also impossible)
Error Conditions
- ERR:DOMAIN is thrown if starting point is not a positive integer (it's okay, though, if it's bigger than the length of the string).