C/C++ 提取字符串中的指定位置(截取字符串、提取字符串)
·
版权声明:转载需标明该文链接。 https://blog.csdn.net/zaibeijixing/article/details/88721195
一、利用C++自带字符串函数:
int k = str.find_first_of('xyz.jpg'); // 获取字符串中第一个指定字符(串)'xyz.jpg'的位置
int k = str.find_last_of('.'); // 获取字符串中最后一个指定字符(串)'.'的位置
string str1 = str.substr(k, N); // 获取第k位及之后共N个字符,(若N超出size则到最后)
以下为6个小例子,代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
//【1】获取前缀
string str2 = "hello.jpg";
int np3 = str2.find_first_of('.'); //对于单个的指定字符first/last都可以//
cout << "np3 = " << np3 << endl;
string str2_s = str2.substr(0, np3); // 获取首位到字符p间共np3 个字符
cout << "str2: " << str2_s << endl << endl;
//np3 = 5
//str2: hello
//【2】获取后缀//
string sttr = "1234567=abcdef"; //怎么获得abcdef?//
int sttr_size = sttr.size();
cout << "sttr_size=" << sttr_size << endl;
int np5 = sttr.find_first_of('=');
string sttr_end = sttr.substr(np5, sttr_size - 1);
cout << "sttr_end:" << sttr_end << endl;
//sttr_size=14
//sttr_end:=abcdef
//【3】获取中间任意指定字符间的
string str = "E:\\Part=HF3210.ppt";
int np1, np2;
np1 = str.find_last_of('\\'); // 获取字符串中最后一个指定字符(串)的位置
np2 = str.find_last_of('.');
string str1 = str.substr(np1 + 1, np2 - np1 - 1); // str.substr(a,b);保留从第a位开始,共b个字符
cout << "str1: " << str1 << endl << endl;
//str1: Part=HF3210
//【4】获取中间任意个数
str = "E:/mypic/0.jpg";
cout << str << endl;
cout << "取第1位及之后的共5个字符:" << str.substr(1, 5) << endl;
//E:/mypic/0.jpg
//取第1位及之后的共5个字符::/myp
//【注意】含有”\\”双斜杠的要千万注意,其中一个斜杠\是转义字符是不计入位数的
str = "E:\\mypic\\0.jpg";
cout << str << endl;
cout << "取第1位及之后的共5个字符:" << str.substr(1, 5) << endl;
//E:\mypic\0.jpg 这里在打印时会自动去除转义的\
//取第1位及之后的共5个字符::\myp
//【5】混合
string name = "6.ppt.12345.jpg";
int np4 = name.find_first_of('ppt');
cout << "np4 = " << np4 << endl;
string person_name = name.substr(0, np4); //获取首位到字符串‘ppt’间共np4 个字符
cout << "str3: " << person_name << endl;
//np4 = 4
//str3: 6.pp
//【6】首部/尾部n个
string str_1 = "ABCD01234567";
cout << str_1 << endl;
cout << "长度:" << str_1.size() << endl;
cout << "长度:" << str_1.length() << endl;
//获取开头/结尾的n个
cout <<"字符串的前3个:" << str_1.substr(0, 3) << endl;
cout << "字符串的末尾3个:" << str_1.substr(str_1.size() - 3, 3) << endl;
cout << "字符串的末尾8个:" << str_1.substr(4, str_1.size() - 4) << endl;
/* 输出
ABCD01234567
长度:12
长度:12
字符串的前3个:ABC
字符串的末尾3个:567
字符串的末尾8个:01234567
*/
getchar();
}
输出:
见代码内
二、利用C字符操作
清除指定符号及其右侧的全部。
将指定位置符号置为’\0’,结束字符串。
代码示例:(为便于输出也引入了c++内容)
#include <iostream>
#include <string>
using namespace std;
int main()
{
// 清除指定符号及其右侧的全部
// 本例将最后一个'.'及右侧清除,保留“123.xxxx”
char fileName[128] = "123.xxxx.txt";
int strLen = strlen(fileName);
cout << "strLen= " << strLen << endl;
cout << fileName << endl;
for (int i = strLen - 1; i >= 0; i--)
{
if (fileName[i] == '.')
{
// for循环为第一种方式,将之后的逐个赋'\0',也等价于赋0。
//for (int j = i; j < strLen; j++)
//{
// fileName[j] = '\0'; // 字符串遇'\0'结束
// //fileName[j] = 0;
//}
fileName[i] = 0; // 为第二种方式,该位置赋值结束,之后的自动忽略。
break;
}
}
cout << fileName << endl;
getchar();
return 1;
}
还有一个也是char方法可做简单参考。
代码如下:
/*https://ask.csdn.net/questions/717041*/
#include <stdio.h>
#include <string.h>
void substring(char *s, char ch1, char ch2, char *substr)
{
while (*s && *s++ != ch1);
while (*s && *s != ch2)
*substr++ = *s++;
*substr = '\0';
}
int main()
{
char str[] = "纬度:123°12'12''经度:124°25'35'' ";
char sub1[20];
char sub2[20];
//string str1 = "yesterday once more";
substring(str, '纬', '经', sub1);
//substring(str, ':', ,sub2);
printf("%d\n", strlen(sub1));
sub1[strlen(sub1) - 1] = '\0';
printf("substring=%s\n", sub1);
printf("%d\n", strlen(sub1));
/*sub2[strlen(sub2) - 1] = '\0';
printf("substring=%s\n", sub2);*/
return 0;
}
总的来说:
string的比char的更简便一些。
可结合使用,满足多种需求。
版权声明:转载需标明该文链接。 https://blog.csdn.net/zaibeijixing/article/details/88721195
更多推荐
已为社区贡献5条内容
所有评论(0)