linux c/c++ 字符串 操作之 split
来源:互联网 发布:山田凉介给知念项链 编辑:程序博客网 时间:2024/06/03 13:22
linux c 字符串 操作之 分割 split
=====================================
#include <stdio.h>
#include <stdlib.h>/**
* 分割字符串成二维数组
* 可根据传入分割符来计算出二维数组长度大小
* @param msg --需要分割的字符串
* @param splitChar -- 用于分割字符串的字符
* @param arrLen -- 返回二维数据的长度,用于遍历
* @return 字符二维数组
*/
char** splitStr(const char *msg, char splitChar, int *arrLen)
{
int pos = 0;
const char *tmp = msg;
int tmpArrLen =1;
int maxStrLen = 0;
int tmpStrLen = 0;
while(*tmp != '\0')
{
if(*tmp == splitChar)
{
tmpStrLen = 0;
tmpArrLen++;
}
else
{
tmpStrLen++;
if(tmpStrLen > maxStrLen)
{
maxStrLen = tmpStrLen; //get the max string length
}
}
tmp++;
}
if(tmpArrLen == 0)
{
*arrLen = 0;
return NULL;
}
*arrLen = tmpArrLen;
printf("arrLen=%d, maxStrLen=%d\n", *arrLen ,maxStrLen);
maxStrLen=maxStrLen+1; //多加1 用于存放 \0结束符
char **retArr = (char **)malloc( sizeof(char) * tmpArrLen);
int i=0;
for(i=0; i < tmpArrLen; i++)
{
retArr[i] = (char *)malloc(maxStrLen);
}
tmp = msg;
i= 0;
int j=0;
while(*tmp != '\0')
{
if(*tmp == splitChar)
{
retArr[i][j] = '\0';
i++;
j=0;
}
else
{
retArr[i][j] = *tmp;
j++;
if(j>=maxStrLen)
{
retArr[i][j-1] = '\0';
j--;
}
}
tmp++;
}
retArr[i][j] = '\0';
return retArr;
}
int main()
{
const char msg[]={"aaaaa,bbbbbbbb,cc"};
int arrLen=0;
char** strArr = splitStr(msg, ',', &arrLen);
if(strArr != NULL)
{
int i=0;
for(i=0; i< arrLen; i++)
{
printf("strArr[%d]=%s\n", i, strArr[i]); //遍历
}
}
//释放空间
int i=0;
for(i=0; i< arrLen; i++)
{
free(strArr[i]);
}
free(strArr);
}
==================================================================
linux c++ 字符串 操作之 split
#include <string>
#include <vector>
using namespace std;
/**
* Split string to array
* @param str -- the string need to be splited.
* @param vec -- vector use to store splited string item.
* @param splitChar -- the split character
*/
void splitStr(const string &str, vector<string> &vec, const string &splitChar)
{
string::size_type pos = str.find(splitChar);
string::size_type pos1 = 0;
while(string::npos != pos)
{
vec.push_back(str.substr(pos1, pos -pos1));
pos1 = pos + splitChar.size();
pos = str.find(splitChar, pos1);
}
if(pos1 != str.length())
{
vec.push_back(str.substr(pos1));
}
}
int main()
{
string msg = "aaaaa,bbbbbbbb,cc";
//分割
vector<string> vec;
splitStr(msg, vec, ",");
//遍历
int i=0;
for(i=0; i< vec.size(); i++)
{
cout << vec[i] << endl;
}
}
阅读全文
0 0
- linux c/c++ 字符串 操作之 split
- Linux C 字符串操作
- Linux C 字符串操作
- Linux下C语言字符串操作之分割字符串总结
- 分割字符串函数split(C#)
- 分割字符串函数split(C#)
- c 分割字符串函数 split
- C++:实现split分割字符串
- C++:实现split分割字符串
- C++:实现split分割字符串
- C++:实现split分割字符串
- C++:实现split分割字符串
- C++:实现split分割字符串
- C/C++之字符串操作
- linux内核之C语言字符串操作函数集
- c语言之split实现
- Linux C之IO操作
- 内存及字符串操作篇(Linux c)
- Servlet上传文件源码
- mint-ui —— header的使用
- 高通平台msm8916修改开机logo 高通平台修改LK(bootloader)开机logo
- Spring通过构造器来获得依赖Bean
- JVM Finalize实现原理与代价
- linux c/c++ 字符串 操作之 split
- UE4在UI上显示人物模型
- 通俗易懂的解释计算机单位中位、字节、字符、进制、存储类型。
- JAVA从html中提取纯文本
- angularjs 日期控件 中文展示
- apicloud开发app的总结。
- html 图片显示的几种方式
- UVA 246 10-20-30
- 图论500题