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函数的第一个参数)的值被改变为第一次分割之后的结果