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

  • 18
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值