Abstraction means to "forget" or "surpress" details and only use what you need. I find the best way to word abstraction is taken from Ole John Dahl in Structured Programming (https://dl.acm.org/doi/book/10.5555/1243380 section 3). He says something along the lines of "abstract away details that are too far removed and concentrate on the details that are most related to your problem".
So he's saying, don't make your abstractions based on details that you are supposed to be abstracting away. Here's an example:
Applying what he is saying here, the abstraction String shouldn't depend on the details of how its implemented. Or worded differently - the users of string should not depend on the details that are too far removed on what they're using the string for. A user of string doesn't usually care about the computer representation, but cares about what can be done to it.
Here is the String abstraction properly abstracted:
void Concat(String* other_string);
void Append(char c);
private: /* Private here, this is suppressing the details */
Note how the "details" being the character array is now hidden (or surpressed, abstracted away) and the users of the String class no longer depend on the details.
This book has an amazing explanation of abstraction. Highly recommend skimming it to see how simple abstraction (both procedural and data abstraction) is.