String Indexing
Strings are composed of characters. In literals be careful of the different
kinds of quotes: single for individual characters for type char
and double for strings
of 0 or more characters. For example,
'u'
(single quotes) is a char type literal, while "u"
is a string
literal, referencing a string object. While "you"
is a legal string
literal, 'you'
generates a compiler error
(too many characters for a char literal).
Many of the operations on strings depend upon referring to the positions of characters in the string. A position is given by a numerical index number. In C#, positions are counted starting at 0, not 1. The indices of the characters in the string “coding” are labeled:
Index |
0 |
1 |
2 |
3 |
4 |
5 |
Character |
c |
o |
d |
i |
n |
g |
There are 6 characters in "coding"
, while the last index is 5.
Warning
Because the indices start at 0, not 1, the index of the last character is one less that the length of the string. This is a common source of errors!
You can easily create an expression that refers to an individual character inside a string. Use square braces around the index of the character:
csharp> string s = "coding";
csharp> s[2];
'd'
csharp> s[0];
'c'
csharp> s[5];
'g'
csharp> string greeting = "Bonjour";
csharp> greeting[1];
'o'
Note from the single quotes that the result is a char
in each case.
C# does not allow the typography for normal mathematical subscripts,
like \(s_2\).
There is a correspondence with index notation, so s[2]
is
sometimes spoken as “s sub 2”. The indices are sometimes referred to as
subscripts.
In this introduction, we have used literal integers for the subscripts. The most common situation in practice is to have a variable or a more complicated expression as the subscript. An expression inside square braces is always evaluated to find the resulting index:
csharp> string s = "coding";
csharp> int n = 3;
csharp> s[n-1];
'd'
When we get to loops, we will find this is useful.
Indexing Exercise
What is printed by this fragment?
string str = "fragment";
int k = 3;
Console.WriteLine(str[1]);
Console.WriteLine(str[k]);
Console.WriteLine(str[2*k - 2]);
Write an expression that would give you the n in str
, above.
Play with csharp: declare other strings and int
variables, and make up
string indexing expressions for which you predict the value and then test.