提取字符串中的指定位置(截取字符串、提取字符串)

C/C++ 专栏收录该内容
17 篇文章 0 订阅

版权声明:转载需标明该文链接。 https://blog.csdn.net/zaibeijixing/article/details/88721195

一、利用C++自带字符串函数:

np1 = str.find_first_of('abc');     // 获取字符串中一个指定字符(串)的位置

np2 = str.find_last_of('.');          // 获取字符串中最后一个指定字符(串)的位置

string str1 = str.substr(a,b);      // 根据以上两个端位置,保留从第a位开始,共b个字符到字符串str1

以下为3个小例子,代码:

#include <iostream>
#include <string>
using namespace std;

int main()
{

	string str = "E:\\Part\\2014\\HF3210\\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;


	string str2 = "hello.jpg";
	int np3 = str2.find_last_of('p');
	cout << "np3 = " << np3 << endl;
	string str2_s = str2.substr(0, np3);	//	获取首位到字符p间共np3 个字符
	cout << "str2: " << str2_s << endl << endl;



	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;

	getchar();

}

输出:

str1: HF3210

np3 = 7
str2: hello.j

np4 = 4
str3: 6.pp

二、利用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

  • 2
    点赞
  • 0
    评论
  • 26
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

zaibeijixing

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值