FAQ: Working with Text - Get Parts of Strings

This community-built FAQ covers the “Get Parts of Strings” exercise from the lesson “Working with Text”.

Paths and Courses
This exercise can be found in the following Codecademy content:

Learn C#

FAQs on the exercise Get Parts of Strings

There are currently no frequently asked questions associated with this exercise – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this exercise. Ask or answer a question by clicking reply (reply) below.

If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this exercise, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.

Join the Discussion. Help a fellow learner on their journey.

Ask or answer a question about this exercise by clicking reply (reply) below!

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources? Head here.

Looking for motivation to keep learning? Join our wider discussions.

Learn more about how to use this guide.

Found a bug? Report it!

Have a question about your account or billing? Reach out to our customer support team!

None of the above? Find out where to ask other questions here!

1 Like

I have found a strange answer to one of the exercises.

Here is the exercise: https://www.codecademy.com/courses/learn-c-sharp/lessons/csharp-working-with-text/exercises/get-parts-of-strings

The way we are taught and expected to answer goes along those lines:

      int charPosition = name.IndexOf("F");
      char firstLetter = name[charPosition];

Isn’t it strange? We write a code for finding what the first letter is by writing the first letter manually. Wouldn’t a better answer be:

char firstLetter = name[0];

I am no pedagogy specialist, but I would tend to believe that the intend answer is a bit redundant and purposeless. What do you guys think?

P.-S.: I’m a new C# learner, so maybe I got something completely wrong. Let me know if I did.

36 Likes

I agree with you that if all we’re trying to do is get the first letter of a string, and convert it char
char firstLetter = name[0]; is much more efficient. Probably, they were trying to illustrate the use of the IndexOf() method, but it might have been a better lesson if they used a letter other than the first, and named the variable something like positionOfLetter.
Maybe something like this would demonstrate the functionality of IndexOf() better:

string name = "Benjamin Franklin";
Console.WriteLine(name);
int charPosition = name.IndexOf("F");
char firstLetter = name[charPosition];
Console.WriteLine(firstLetter + " is the " + charPosition + "th letter in " + name + ".");
4 Likes

Actually it would be the charPosition + 1 letter since IndexOf() starts at 0. Oops! :man_facepalming:

Console.WriteLine(firstLetter + " is the " + (charPosition + 1) + "th letter in " + name + ".");

Upvoting. Hopefully they revisit this lesson refactor.

2 Likes

I completely agree! I couldn’t even figure out what I was supposed to use for IndexOf(), because each person will have a different letter.

4 Likes

Agreed. This entire lesson needs to be reworked. It’s not practical, efficient, or realistic. Also, overall, I hate how the lessons require you to declare variables specifically using int, string, bool, etc instead of using var. Let C# do the work of figuring out what’s what.

3 Likes

I agree that this lesson needs to be reworked. I did not find the instructions clear on what exactly was I supposed to do. The coding itself is pretty easy.

3 Likes

IMO, I don’t recommend letting C# do an extra job, if you know the type of variable, why let C# store any type? that is a bad practice, you don’t have control what you want store/receive/send and the code will be hard to read and follow if you throw any error.

Agreed with this. char firstLetter = name[0]; is not just more efficient, but it’s better design. It makes the function usable for more than one hard-coded name.

Codecademy, please consider reworking this lesson.

1 Like

How about the last part of the exercise?

This is what I tried,

// Print results Console.WriteLine(firstLetter.ToString() + ' ' + lastName);

and this was the result.

102Abbasi

Had to change it to this to get the result I would have expected to be the correct answer:

Console.WriteLine(firstLetter.ToString()+ ' ' + lastName);

Also agree. I was lost because I was trying to make it find the first letter of any input, and never even considered this was the only name to use. Why would I? Some of these lessons make learning way harder than it should be

2 Likes

I agree it appears the to me that they want us to do something like.

int firstChar = name.IndexOf(“F”);
char firstLetter = name [firstChar];

But in real world case you may not know the persons name so some thing like.

int firstChar = name.IndexOf[0];

might be more use full . Dont get me wrong I am just learning an am by no means an expert, so my code is probably flawed but hope you get the point.

1 Like

Hello, @tera5049690011.

I think the exercise intended to teach finding a character in a string, and retrieving its index. Using the first character in the string was not the best way to do it. I agree with your sentiment, but your real world case has a small error:

Thanks midlindner for lettinng me know

1 Like

Thank you for posting this! I have been so confused by this method, this now makes sense.

I found that switching the order made it make sense and provide the coveted green checkmark.
Ultimately, I am still confused by this exercise, and could not get it to print the first letter and last name without telling the code to print the F.

// Get first letter
char firstLetter = name[0];
int positionZero = name.IndexOf(“firstLetter”);

// Get last name
string name = “Farhad Hesam Abbasi”;
int charPosition = name.IndexOf(“Abbasi”);
string lastName = name.Substring(charPosition);

This lesson has confused me more than anything. It makes no sense if you’ve got multiple clients to type out code for each of them when you can just write for example, string firstCilentName = “J Netwood”; Really really bad lesson, and its done me more harm than good…

Hello, @thomaspass5127656474.

Welcome to the forums.

The examples used in the lesson are rather silly. However, learning how to manipulate strings is extremely valuable. The String.IndexOf(), and String.Substring() methods are important to understand. Another useful method is String.LastIndexOf(). If we refactor the code from the exercise to use the String.LastIndexOf() method we could complete the task on names that we don’t necessarily already know. For example if we had an array of names, we could do something like this:

using System;

namespace NameGrab
{
  class Program
  {
    static void Main(string[] args)
    {
      // Array of names
      string[] names = new string[5] {"Farhad Hesam Abbasi", "Elmer Fudd", "Buggs Rudolph Bunny", "Daffy Edgar Duck", "Porky Pig"};
      //Use a for loop to access each name in the names array
      for(int i = 0; i < names.Length; i++) {
        string name = names[i];
        
        // Get first letter
        // The first letter is at index 0
        char firstLetter = name[0];

        // Get last name
        // The last space in the name should precede the last name, so we use its index
        int lIndex = name.LastIndexOf(" ");
        // Add 1 to the index of the last space, so we start with the first letter of the last name
       // and retrieve all characters from there to the end of the string
        string lastName = name.Substring(lIndex + 1);
        // Print results
        Console.WriteLine($"{firstLetter}. {lastName}");
      }
    }
  }
}

Output:

F. Abbasi
E. Fudd
B. Bunny
D. Duck
P. Pig

1 Like

Thank you dude… I learned so much from just searching up what “string” did, and Im happy to see that even though I dont understand everything in your code, I can infer what they do from the surrounding code. Great reply!

1 Like