Skip to content

Commit aaa9d6f

Browse files
[Edit] C++: Strings
* Update strings.md * Minor changes ---------
1 parent 46b684f commit aaa9d6f

File tree

1 file changed

+282
-12
lines changed

1 file changed

+282
-12
lines changed
+282-12
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,314 @@
11
---
22
Title: 'Strings'
3-
Description: 'Strings are objects that represent sequences of characters.'
3+
Description: 'Strings in C++ are objects that represent sequences of characters.'
44
Subjects:
55
- 'Computer Science'
66
- 'Game Development'
77
Tags:
8-
- 'Strings'
98
- 'Characters'
109
- 'Data Types'
10+
- 'Strings'
1111
CatalogContent:
1212
- 'learn-c-plus-plus'
1313
- 'paths/computer-science'
1414
---
1515

16-
**Strings** are objects that represent sequences of characters. In C++, the two ways to create strings are with the `string` class or with [C-style](https://www.codecademy.com/resources/docs/c/strings) character strings.
16+
**Strings** are objects that represent sequences of characters. In C++, there are two ways to create strings:
1717

18-
## String Class
18+
- Using the `string` class from the Standard Template Library (STL)
19+
- Using C-style character arrays
1920

20-
The standard `string` class provides support for strings in C++.
21+
## `string` Class
22+
23+
The standard `string` class provides robust support for string operations in C++. To use this class, include the `<string>` header:
2124

2225
```cpp
23-
std::string welcome = "Hi";
24-
std::string user_name = "@sonny";
25-
std::string message = "Good nite! 😇";
26+
#include <string>
27+
28+
std::string greeting = "Hello, World!";
29+
std::string empty_string = "";
30+
std::string user_name = "@developer123";
31+
std::string message = "Good morning!";
2632
```
2733

28-
## C-Style Character Strings
34+
### Creating and Initializing Strings
35+
36+
A string can be created and initialized in several ways:
37+
38+
```cpp
39+
#include <iostream>
40+
#include <string>
41+
42+
int main() {
43+
// Different ways to create strings
44+
std::string s1; // Empty string
45+
std::string s2 = "C++"; // Initialization with string literal
46+
std::string s3("Programming"); // Using constructor
47+
std::string s4(s2); // Copy of another string
48+
std::string s5(5, 'a'); // String with 5 'a' characters: "aaaaa"
49+
50+
std::cout << "s1: " << s1 << std::endl;
51+
std::cout << "s2: " << s2 << std::endl;
52+
std::cout << "s3: " << s3 << std::endl;
53+
std::cout << "s4: " << s4 << std::endl;
54+
std::cout << "s5: " << s5 << std::endl;
55+
56+
return 0;
57+
}
58+
```
59+
60+
### Accessing and Modifying Strings
61+
62+
Individual characters inside a string can be accessed and modified using indices, just like [arrays](https://www.codecademy.com/resources/docs/cpp/arrays):
63+
64+
```cpp
65+
#include <iostream>
66+
#include <string>
67+
68+
int main() {
69+
std::string text = "Hello";
70+
71+
// Accessing characters
72+
char first = text[0]; // 'H'
73+
char last = text[4]; // 'o'
74+
75+
// Modifying characters
76+
text[0] = 'J'; // Changes "Hello" to "Jello"
77+
78+
std::cout << "Modified string: " << text << std::endl;
79+
80+
return 0;
81+
}
82+
```
83+
84+
### Basic String Operations
85+
86+
The `string` class provides several useful methods for string manipulation:
87+
88+
```cpp
89+
#include <iostream>
90+
#include <string>
91+
92+
int main() {
93+
std::string text = "C++ Programming";
94+
95+
// String length/size
96+
std::cout << "Length: " << text.length() << std::endl; // 15
97+
std::cout << "Size: " << text.size() << std::endl; // 15 (same as length)
98+
99+
// Check if empty
100+
std::cout << "Is empty: " << text.empty() << std::endl; // 0 (false)
29101

30-
The C-style character string originated from the C language and continues to be supported within C++.
102+
// Substring extraction
103+
std::string sub = text.substr(0, 3); // "C++"
104+
std::cout << "Substring: " << sub << std::endl;
105+
106+
// Find position of a substring
107+
size_t position = text.find("Programming");
108+
if (position != std::string::npos) {
109+
std::cout << "Found at position: " << position << std::endl; // 4
110+
}
111+
112+
return 0;
113+
}
114+
```
31115

32-
In C, the string is actually an array of characters, followed by a `null` character `'\0'`.
116+
### String Concatenation
117+
118+
Strings can be joined with the `+` operator or the `.append()` method:
119+
120+
```cpp
121+
#include <iostream>
122+
#include <string>
123+
124+
int main() {
125+
std::string first_name = "Ada";
126+
std::string last_name = "Lovelace";
127+
128+
// Using + operator
129+
std::string full_name = first_name + " " + last_name;
130+
131+
// Using .append() method
132+
std::string greeting = "Hello, ";
133+
greeting.append(first_name);
134+
135+
// Using += operator
136+
std::string message = "Welcome ";
137+
message += "to C++!";
138+
139+
std::cout << full_name << std::endl;
140+
std::cout << greeting << std::endl;
141+
std::cout << message << std::endl;
142+
143+
return 0;
144+
}
145+
```
146+
147+
This example results in:
148+
149+
```shell
150+
Ada Lovelace
151+
Hello, Ada
152+
Welcome to C++!
153+
```
154+
155+
## C-Style Character Strings
156+
157+
C-style strings are character arrays that originated from the [C](https://www.codecademy.com/resources/docs/c) language and continue to be supported in C++. In C, a string represents an array of characters, terminated by a `null` character `'\0'`.
33158

34159
```cpp
35160
char message[] = "Howdy";
36161
```
37162

38-
So here's the memory presentation:
163+
The memory representation of this C-style string looks like this:
39164

40165
```shell
41166
Character | 'H' 'o' 'w' 'd' 'y' '\0'
42167
Index | 0 1 2 3 4 5
43168
Address | 23451 23452 23453 23454 23455 23456
44169
```
170+
171+
### Creating C-Style Strings
172+
173+
C-style strings can be created in several ways:
174+
175+
```cpp
176+
#include <iostream>
177+
178+
int main() {
179+
// Different ways to create C-style strings
180+
char str1[] = "C++"; // Automatic size calculation
181+
char str2[4] = "C++"; // Explicitly specify size (including null character)
182+
char str3[] = {'C', '+', '+', '\0'}; // Character by character with null terminator
183+
char str4[100] = "Programming"; // With extra space allocation
184+
185+
std::cout << "str1: " << str1 << std::endl;
186+
std::cout << "str2: " << str2 << std::endl;
187+
std::cout << "str3: " << str3 << std::endl;
188+
std::cout << "str4: " << str4 << std::endl;
189+
190+
return 0;
191+
}
192+
```
193+
194+
### Working with C-Style Strings
195+
196+
C-style strings require the `<cstring>` header for string manipulation operations:
197+
198+
```cpp
199+
#include <iostream>
200+
#include <cstring>
201+
202+
int main() {
203+
char str1[20] = "Hello";
204+
char str2[20] = "World";
205+
char result[40];
206+
207+
// String length
208+
std::cout << "Length of str1: " << strlen(str1) << std::endl;
209+
210+
// String copy
211+
strcpy(result, str1);
212+
std::cout << "After strcpy: " << result << std::endl;
213+
214+
// String concatenation
215+
strcat(result, " ");
216+
strcat(result, str2);
217+
std::cout << "Concatenated string: " << result << std::endl;
218+
219+
// String comparison
220+
int comparison = strcmp(str1, str2);
221+
if (comparison < 0) {
222+
std::cout << "str1 is less than str2" << std::endl;
223+
} else if (comparison > 0) {
224+
std::cout << "str1 is greater than str2" << std::endl;
225+
} else {
226+
std::cout << "str1 equals str2" << std::endl;
227+
}
228+
229+
return 0;
230+
}
231+
```
232+
233+
The output looks like this:
234+
235+
```shell
236+
Length of str1: 5
237+
After strcpy: Hello
238+
Concatenated string: Hello World
239+
str1 is less than str2
240+
```
241+
242+
## `string` Class vs. C-Style Strings
243+
244+
Here are some key differences between the two string types:
245+
246+
| Feature | `string` Class | C-Style Strings |
247+
| ----------------- | ------------------------- | ------------------------- |
248+
| Memory management | Automatic | Manual |
249+
| Bounds checking | Yes | No |
250+
| Size | Dynamic (can grow/shrink) | Fixed at declaration |
251+
| Null termination | Handled automatically | Must be managed manually |
252+
| Concatenation | Using `+` operator | Using `strcat()` |
253+
| Comparison | Using `==`, `!=`, etc. | Using `strcmp()` |
254+
| Character access | Using `[]` or `at()` | Using `[]` |
255+
| Required header | `<string>` | `<cstring>` |
256+
| Memory safety | Safe | Prone to buffer overflows |
257+
258+
> **Note:** The `string` class is generally preferred in modern C++ for its safety and convenience features.
259+
260+
## Converting Between String Types
261+
262+
You can convert between `std::string` and C-style strings:
263+
264+
```cpp
265+
#include <iostream>
266+
#include <string>
267+
#include <cstring>
268+
269+
int main() {
270+
// C-style string to std::string
271+
char cstr[] = "Hello C++";
272+
std::string str1(cstr);
273+
274+
// std::string to C-style string
275+
std::string str2 = "C++ Programming";
276+
const char* cstr2 = str2.c_str(); // Get a C-style string pointer
277+
278+
std::cout << "str1: " << str1 << std::endl;
279+
std::cout << "cstr2: " << cstr2 << std::endl;
280+
281+
return 0;
282+
}
283+
```
284+
285+
## Frequently Asked Questions
286+
287+
### 1. What's the difference between `length()` and `size()` for strings?
288+
289+
In C++, the [`length()`](https://www.codecademy.com/resources/docs/cpp/strings/length) and [`size()`](https://www.codecademy.com/resources/docs/cpp/strings/size) methods of the `string` class are functionally identical. Both return the number of characters in the string. The dual naming is historical - `size()` is consistent with other STL containers, while `length()` is more intuitive for strings.
290+
291+
```cpp
292+
std::string text = "Hello";
293+
std::cout << text.length(); // Returns 5
294+
std::cout << text.size(); // Also returns 5
295+
```
296+
297+
### 2. Why should I use string class instead of C-style strings?
298+
299+
The `string` class provides several advantages over C-style strings:
300+
301+
- **Memory management:** Automatically handles allocation and deallocation
302+
- **Safety:** Protects against buffer overflows
303+
- **Functionality:** Provides built-in methods for common operations
304+
- **Flexibility:** Can dynamically grow and shrink as needed
305+
306+
C-style strings require manual memory management and are prone to errors like buffer overflows.
307+
308+
### 3. How do I convert a number to a string in C++?
309+
310+
The simplest way to convert a number to a string in modern C++ is to use the `std::to_string()` function:
311+
312+
For example: `std::to_string(42)` returns the string `"42"`.
313+
314+
For converting a string to a number, you can use functions like `std::stoi()` (string to int), `std::stof()` (string to float), etc. For example, `std::stoi("42")` returns the integer `42`.

0 commit comments

Comments
 (0)