C/C++字符串分割

1、使用strtok_s分割字符串


#include <stdio.h>
#include <string>
#include <stdlib.h>
#include <vector>
using namespace std;
int main()
{
	vector<string> vctStr;//

	char string[] = "aa bb\tcc\ndd,ee,,,ff, , gg hh";
	char seps[] = " ,\t\n";
	char* splitResult = NULL;
	char* ptr = NULL;
	//相较于strtok()函数,strtok_s函数需要用户传入一个指针,用于函数内部判断从哪里开始处理字符串
	splitResult = strtok_s(string, seps, &ptr);
	while (splitResult != NULL)
	{
		vctStr.push_back(splitResult);
		splitResult = strtok_s(NULL, seps, &ptr);
	}
}

2、使用strtok分割字符串

strtok函数由于太老,在vs中编译的时候会警告导致无法编译成功。
因此可以右键 解决方案管理器中的当前项目,选择“属性”,
之后在"c/c++" -> “预处理器” -> “预处理器定义”中添加“_CRT_SECURE_NO_WARNINGS”保存即可消除报警。
#include <stdio.h>
#include <string>
#include <stdlib.h>
#include <vector>
 
 int main()
  {
	vector<string> vctStr;

	char string[] = "aa bb\tcc\ndd,ee,,,ff, , gg hh";
	char seps[] = " ,\t\n";
	char* splitResult = NULL;

	splitResult = strtok(string, seps);
	while (splitResult != NULL)
	{
		vctStr.push_back(splitResult);
		splitResult = strtok(NULL, seps);
	}

}

示例:


typedef struct Info
{
	int id;
	string name;
	string sex;

};

bool CMFCApplication1Dlg::LoadFile(char* filePath, vector<Info>& vctInfo)
{
	CStdioFile sf;
	if (sf.Open(filePath, CFile::modeRead | CFile::typeBinary))
	{

		CString line;
		while (sf.ReadString(line))
		{			
			vector<string > vctTemp;
			char seps[] = "| ,\t";
			char* splitResult = NULL;
			splitResult = strtok(line.GetBuffer(), seps);
			while (splitResult != NULL)
			{
				vctTemp.push_back(splitResult);
				splitResult = strtok(NULL, seps);
			}
			Info info;
			info.id = atoi(vctTemp.at(0).c_str());
			info.name = vctTemp.at(1).c_str();
			info.sex = vctTemp.at(2).c_str();
			vctTemp.clear();
			vctInfo.push_back(info);
		}
		sf.Close();
	}
	return false;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中可以使用一些库函数来分割和拼接字符串。主要的函数有strtok、strcat和strncat。 分割字符串可以使用strtok函数来实现。它可以将一个字符串按照指定的分隔符分割成多个子字符串。需要注意的是,strtok函数在每次调用时都会修改原字符串,将分隔符部分替换为'\0',并返回每个子字符串的起始地址。我们可以使用一个循环来重复调用strtok函数,直到获取到所有的子字符串。具体的示例代码如下: ```c #include <stdio.h> #include <string.h> int main() { char str[] = "Hello,World;C;Language"; char *token = strtok(str, ",;"); while(token != NULL) { printf("%s\n", token); token = strtok(NULL, ",;"); } return 0; } ``` 上述代码中的字符串"Hello,World;C;Language"会被按照逗号和分号分割成4个子字符串"Hello"、"World"、"C"和"Language"。 拼接字符串可以使用strcat或strncat函数来实现。strcat函数将一个字符串追加到另一个字符串的末尾,而strncat函数除了指定追加长度还可以指定追加的字符个数。我们需要确保目标字符串有足够的空间来容纳追加的内容。具体的示例代码如下: ```c #include <stdio.h> #include <string.h> int main() { char str1[20] = "Hello,"; char str2[] = "World!"; strcat(str1, str2); printf("%s\n", str1); return 0; } ``` 上述代码中,字符串"Hello,"会被追加上字符串"World!",结果输出为"Hello,World!"。 需要注意的是,如果目标字符串的长度不够,则需要使用strncat函数来避免缓冲区溢出的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值