C++开发学习笔记:C++利用strtok函数根据特定字符分割字符串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JustWantToFly/article/details/82777533

1.使用strtok函数分割字符串

//定义一个char*指针类型的变量;strlen获取变量的实际长度;       
char * src_columns = new char[strlen(SRC_COLUMNS) + 1];
		strcpy(src_columns, SRC_COLUMNS);//将字符串转换为char*指针类型
		EDLog(1, 1, "指针类型变量的值[ %s ] ", (const char*)src_columns);
		string str = src_columns;
        //从str的开始位置到str的结束位置查找
		strCount = count(str.begin(), str.end(), ',');
		EDLog(1, 1, "逗号在字符串中出现的次数[ %d ] ", strCount);

		EDLog(1, 1, "字符串第一次分割前src_columns[ %s] ", (const char*)src_columns);

		//strtok:用指定的分割符','分割字符串;第一次分割必须填写第一个参数,后面分割第一个参数可以设置为NULL
		//执行后会改变指针变量的值src_columns的值改变为第一次分割的值
		char * srcColumns = strtok(src_columns, ",");
		
		EDLog(1, 1, "字符串第一次分割后src_columns[ %s] ", (const char*)src_columns);
	
		while (srcColumns != NULL)//循环取出分割后
		{
			EDLog(1, 1, "上一次分割的值srcColumns=[ %s] ", (const char*)srcColumns);
			SrcColumns = srcColumns;
			srcColumns = strtok(NULL, ",");
			EDLog(1, 1, "再次分割后的值srcColumns[ %s] ", (const char*)srcColumns);

			EDLog(1, 1, "再次分割后被分割字符串的值src_columns[ %s] ", (const char*)src_columns);
			//break;
		}

2.使用strtok函数分割字符串(两个字符串嵌套循环分割)

char * src_columns = new char[strlen(SRC_COLUMNS) + 1];//定义一个char*指针类型的变量;strlen获取变量的实际长度;
char * dst_columns = new char[strlen(DST_COLUMNS) + 1];//定义一个char*指针类型的变量;strlen获取变量的实际长度;


strcpy(src_columns, SRC_COLUMNS);//将字符串转换为char*指针类型
strcpy(dst_columns, DST_COLUMNS);//将字符串转换为char*指针类型

EDLog("指针类型变量的值[ %s ] ", (const char*)src_columns);
string str = src_columns;
//char * douHao = strstr(src_columns, ",");

strCount = count(str.begin(), str.end(), ',');
printf("逗号在字符串中出现的次数[ %d ] ", strCount);

//strtok:用指定的分割符','分割字符串;第一次分割必须填写第一个参数,后面分割第一个参数可以设置为NULL
//执行后会改变指针变量的值src_columns的值改变为第一次分割的值
char * srcColumns = strtok(src_columns, ",");
//strtok:用指定的分割符','分割字符串;第一次分割必须填写第一个参数,后面分割第一个参数可以设置为NULL
//执行后会改变指针变量的值dst_columns的值改变为第一次分割的值
char * dstColumns = strtok(dst_columns, ",");

while (srcColumns != NULL)//循环取出分割后
{
	char msg[100];
	sprintf(msg,"%d", count_temp + 1);
	CString a =msg;
	SrcColumns = srcColumns;
	printf("第" + a + "次循环srcColumns=[ %s] ", (const char*)srcColumns);

	printf("第" + a + "次循环临时变量SrcColumns_pre=[ %s] ", (const char*)SrcColumns_pre);
	printf("第" + a + "次循环临时变量SrcColumns_pre1=[ %s] ", (const char*)SrcColumns_pre1);
	if (SrcColumns_pre.Find(srcColumns) > -1)
	{
		srcColumns = strtok(NULL, ",");
		printf("第" + a + "次循环比对之后重新分割的值srcColumns[ %s] ", (const char*)srcColumns);
		continue;
	}

	while (dstColumns != NULL)//循环取出分割后
	{
		printf("第" + a + "次循环dstColumns=[ %s] ", (const char*)dstColumns);
		DstColumns = dstColumns;


		if (DstColumns_pre.Find(dstColumns) > -1)
		{
			dstColumns = strtok(NULL, ",");
			continue;
		}
		printf( "第" + a + "次循环临时变量DstColumns_pre1=[ %s] ", (const char*)DstColumns_pre1);

		DstColumns_pre = DstColumns_pre + dstColumns + ",";

		printf("第" + a + "次循环临时变量DstColumns_pre=[ %s] ", (const char*)DstColumns_pre);
		dstColumns = strtok(NULL, ",");
		printf( "第" + a + "次循环再次分割后dstColumns=[ %s] ", (const char*)dstColumns);
		break;
	}
	count_temp++;

	SrcColumns_pre = SrcColumns_pre + srcColumns + ",";
	printf( "第" + a + "次循环临时变量SrcColumns_pre=[ %s] ", (const char*)srcColumns);
	if (count_temp <= strCount + 1)
	{
		//由于strtok分割时改变了src_columns的原始值,因此需要重新定义
		src_columns = new char[strlen(SRC_COLUMNS) + 1];
		strcpy(src_columns, SRC_COLUMNS);//将字符串转换为char*类型
		srcColumns = strtok(src_columns, ",");
	}
}
printf("细部资源查询sql = [%s]", (const char*)returnSql);

注:

strtok第一次分割执行之后,需要分割的字符串变量(strtok函数的第一个参数)的值被改变为第一次分割之后的结果

猜你喜欢

转载自blog.csdn.net/JustWantToFly/article/details/82777533
今日推荐