字符串提取

比如一个字符串“110,hello,119,world,120,computer”,我想提取第3个逗号“,”之后(第4个逗号","之前)的那一段,即“world”;如何用代码实现;

如下:

  ----------------------------------------------------

  #define UART_RECV_FIELD_LENTH 512
  #define UINT16 unsigned short

  -----------------------------------------------------

UINT16 Field( char* InputSentence,char *OutBuf,UINT16 desired_field_number)
{
	UINT16 index                = 1;
	UINT16 index1               = 0;
	UINT16 current_field_number = 0;
	UINT16 string_length        = strlen(InputSentence);
	char return_string[UART_RECV_FIELD_LENTH] = {0};

	memset (OutBuf, 0, UART_RECV_FIELD_LENTH);

	//找到想要提取的参数位置
	while( current_field_number < desired_field_number && index < string_length )
	{
		// 判断字段分隔符及校验和定界符
		if ( InputSentence[ index ] == ‘,‘ || InputSentence[ index ] == ‘*‘ )
		{
			current_field_number++;
		}
		index++;
	}

	//提取参数字段
	if ( current_field_number == desired_field_number )
	{
			while( index < string_length      &&
				InputSentence[ index ] != ‘,‘ &&
				InputSentence[ index ] != 0x00 )
			{
				if(index1 >= UART_RECV_FIELD_LENTH)
				{
					return 0 ;
				}
				return_string[index1]= InputSentence[ index ];
				index++;
				index1++;
			}

	}

	memcpy(OutBuf,return_string,index1);
	return index1;
}

  

  返回值为提取字符串的长度

  char* InputSentence ,输入原始字符串指针

  char *OutBuf ,输出字符串指针

  UINT16 desired_field_number) ,提取字符串的位置

  ----------------------------------------------------------------

  如开头所假设,char *InputSentence = “110,hello,119,world,120,computer”; char OutBuf[]={0};

  调用Field(InputSentence, OutBuf, 3);  则OutBuf内容为“world”;

  扩展:

  1.这里的提取标识符为逗号“,”,那么如果标识符为“,”,“*”等多种,同样可以解决。

  2.如果字符串中仅为数字,对所得字符串数字化处理即可。

  3.可用来判断字符串中两个标识符之间的字符串的长度。

时间: 2024-07-30 04:10:57

字符串提取的相关文章

正则表达式的使用,字符串提取,字符串匹配(C#语言)

在程序中常常设计字符串的处理,比如①:判断用户的输入字符串是否符合要求,是否是非法字符串,②:取出一个很复杂字符串的某一程序中需要的部分等 这事用自己写算法判断通常是十分困难的,所以遇到字符串的处理时要很快想到用正则表达式. 一:正则表达式元字符 •要想学会正则表达式,理解元字符是一个必须攻克的难关.不用刻意记 •.:匹配任何单个字符.例如正则表达式“b.g”能匹配如下字符串:“big”.“bug”.“b g”,但是不匹配“buug”,“b..g”可以匹配“buug”. •[ ] :匹配括号中的

使用javascript从一个字符串提取自字符串

问题:有一个字符串是由ijige句子组成,其中的一个句子拥有一个项目列表,该列表以一个冒号开始(:),以一个句点结束(.),我们如何去提取这个列表 解决思路:使用indexof+String方法来找到冒号,然后再次使用它找到冒号后面的第一个据点,有了这两个位置,使用String subString方法提取字符串 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title&

对字符串提取以及运算操作处理

     enum.h文件,枚举类型文件 1 #ifndef ENUM_H 2 #define ENUM_H 3 4 #include <QDataStream> 5 #include <QtCore/qmath.h> 6 7 enum REG_INS_TYPE {REG_INS,POS_REG_INS,POS_REG_AXIS_INS,AR_PAL_REG_INS,STR_REG}; 8 enum VALUE_TYPE 9 { 10 REG_AR,REG_CONST,REG_R,

NSString从父字符串提取子字符串

NSString除了创建, 对比等等方法, 它还可以在父字符串中提取一段字符形成一个新的子字符串. 使用的方法一共有三种: substringToIndex:如果我在这方法的后面输入一个6, 意思就是截取从第一到第六个的字符, 并形成一个新的子字符串, 类似于开区间, (0 <= a > 6) substringFromIndex:如果我在这方法的后面输入一个5, 意思就是截取从第五到最后一个的字符串, 并形成一个新的子字符串, 类似于闭区间, (5 <= a >=x) subst

【shell】两种字符串提取场景的实现

shell虽然比batch顺眼点儿,但还是老话,入门容易,精通难. 1.场景一是这样的,现有字符串的内容 name: tiger; age:18; location:china; 需求:提取每个属性的值,如age的值为18. 定义了一个函数如下: 1 function getValueOf(){ 2 val=$(cat $1 | grep -oP "(?<=$2)[^;]+" | sed "s/,//g" | sed 's/ //g'| tr -cd &quo

字符串提取操作

1, 过滤字符串中的英文与符号,保留汉字 import re str = "hello,world!!%[545]你好234世界..." str = re.sub("[A-Za-z0-9\!\%\[\]\,\.]", "", str) print(str) 输出结果:你好世界  2, 从字符串中提取字母 result = ''.join(re.findall(r'[A-Za-z]', str)) 原文地址:https://www.cnblogs.

格式化字符串-提取中文

1.原来的String {'info':[{'menuId':'193','menuName':'家装建材'},{'menuId':'194','menuName':'家纺'},{'menuId':'176','menuName':'手机通讯'},{'menuId':'178','menuName':'手机配件'}]} 要求: 家装建材,家纺,手机通讯,手机配件 /** * 格式化字符串 * @param str * @return */ public String SubString(Stri

java字符串提取汉字

import java.util.regex.Matcher; import java.util.regex.Pattern; public class test{ public static void main(String[] args) { String str = "123abc中文cde123abc提取123ab我ABC汉DEF和我们678,854中华人民共和国,美国"; Pattern p = null; Matcher m = null; String value = n

php正则字符串提取汉字

/*$str 为输入.输出字符串变量*/ preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str, $matches); $str = join('', $matches[0]); 原文地址:https://www.cnblogs.com/qingsong/p/9250968.html