一、前面四个是计算带有空格字符串的的长度计算
C语言代码
#include<string.h>
#include<stdio.h>
int main()
{
char s[105];
gets(s);
printf("%d", strlen(s));
return 0;
}
算法2
C++ 代码(常用)
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string a;
getline(cin, a);
cout << a.size() << endl;
return 0;
}
算法3
C++ 代码
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[105];
cin.get(a, 105);//需要注意cin.get()不会把换行符取出删除,影响下一次读入!
cout << strlen(a) << endl;
return 0;
}
算法4
C++ 代码
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[105];
cin.getline(a, 105);//需要注意cin.getline()会把换行符取出删除,不影响下一次读入!
cout << strlen(a) << endl;
return 0;
}
顺带一提 cin 和 scanf读入字符串时遇到空格就停止了
二、对字符串处理的常用的函数
1. size() 或 length()
这两个函数用于返回字符串的长度。
cpp
复制编辑
string s = "hello";
cout << s.size() << endl; // 输出 5
cout << s.length() << endl; // 输出 5
- size() 和 length() 是等价的,返回字符串的字符数。
2. substr(start, length)
从字符串中提取一个子字符串。start 是开始的位置,length 是子字符串的长度。如果 length 超出了范围,返回从 start 到字符串末尾的部分。
cpp
复制编辑
string s = "hello";
string sub = s.substr(1, 3); // 提取从位置 1 开始,长度为 3 的子字符串
cout << sub << endl; // 输出 "ell"
- 如果只传递一个参数 start,会从 start 位置提取到字符串末尾。
cpp
复制编辑
string s = "hello";
string sub = s.substr(2); // 从位置 2 开始提取到字符串末尾
cout << sub << endl; // 输出 "llo"3. find(substring)
返回子字符串第一次出现的位置。如果没有找到子字符串,返回 string::npos。
cpp
复制编辑
string s = "hello";
int pos = s.find("ll");
cout << pos << endl; // 输出 2
- find() 还可以指定搜索的起始位置:s.find("ll", 3) 会从索引 3 开始查找。
4. rfind(substring)
与 find() 类似,但从字符串的末尾开始查找。
cpp
复制编辑
string s = "hello";
int pos = s.rfind("l");
cout << pos << endl; // 输出 3 (从右到左查找)5. erase(start, length)
删除从 start 位置开始的指定长度的字符。
cpp
复制编辑
string s = "hello";
s.erase(1, 2); // 从位置 1 开始删除 2 个字符
cout << s << endl; // 输出 "ho"
- 如果只提供 start 参数,erase() 会删除从 start 到字符串末尾的所有字符。
cpp
复制编辑
string s = "hello";
s.erase(2); // 从位置 2 开始删除到末尾
cout << s << endl; // 输出 "he"6. insert(start, substring)
在指定位置插入一个子字符串。
cpp
复制编辑
string s = "hello";
s.insert(3, "abc"); // 在位置 3 插入 "abc"
cout << s << endl; // 输出 "helabclo"7. replace(start, length, substring)
替换从 start 位置开始的 length 个字符为 substring。
cpp
复制编辑
string s = "hello";
s.replace(1, 2, "abc"); // 从位置 1 开始,替换 2 个字符为 "abc"
cout << s << endl; // 输出 "habclo"8. at(index)
返回指定位置的字符(比 operator[] 更安全,当索引越界时会抛出 out_of_range 异常)。
cpp
复制编辑
string s = "hello";
cout << s.at(1) << endl; // 输出 'e'
- 如果 index 超出了范围,at() 会抛出异常。
cpp
复制编辑
try {
cout << s.at(10) << endl; // 抛出异常
} catch (out_of_range& e) {
cout << "Out of range" << endl;
}9. c_str()
将 string 转换为 C 风格的字符串(即以 null 结尾的字符数组)。
cpp
复制编辑
string s = "hello";
const char* cstr = s.c_str();
cout << cstr << endl; // 输出 "hello"10. push_back(c)
向字符串的末尾添加一个字符。
cpp
复制编辑
string s = "hello";
s.push_back('!');
cout << s << endl; // 输出 "hello!"11. pop_back()
删除字符串的最后一个字符。
cpp
复制编辑
string s = "hello";
s.pop_back();
cout << s << endl; // 输出 "hell"12. clear()
清空字符串内容,使其长度为 0。
cpp
复制编辑
string s = "hello";
s.clear();
cout << s.size() << endl; // 输出 013. empty()
判断字符串是否为空。
cpp
复制编辑
string s = "hello";
cout << (s.empty() ? "Yes" : "No") << endl; // 输出 "No"s.clear();
cout << (s.empty() ? "Yes" : "No") << endl; // 输出 "Yes"14. stoi() / stol() / stoll()
将字符串转换为整数类型。
cpp
复制编辑
string s = "12345";
int num = stoi(s); // 将字符串 "12345" 转换为整数 12345
cout << num << endl; // 输出 12345
- stoi 用于 int,stol 用于 long,stoll 用于 long long。
15. to_string()
将整数或浮点数转换为字符串。
cpp
复制编辑
int num = 12345;
string s = to_string(num); // 将整数 12345 转换为字符串 "12345"
cout << s << endl; // 输出 "12345"16. sort()
对字符串进行排序。需要 #include <algorithm>。
cpp
复制编辑
string s = "dcba";
sort(s.begin(), s.end()); // 对字符串进行字典顺序排序
cout << s << endl; // 输出 "abcd"17. reverse()
反转字符串。需要 #include <algorithm>。
cpp
复制编辑
string s = "hello";
reverse(s.begin(), s.end());
cout << s << endl; // 输出 "olleh"总结:
这些函数可以帮助我们在蓝桥杯等编程竞赛中进行各种字符串处理操作。掌握这些常用的字符串操作函数,会极大提高解题效率。希望这些例子对你有所帮助!如果你对某个具体函数有疑问,或者需要更多的解释,请随时告诉我!