wow-string字符串类说明

wow-string文件说明

  • 项目地址:https://gitee.com/wow-iot/wow-iot7
  • 本文件的的功能实现类似于QString类,用于处理字符串操作,主要涉及字符串类创建、销毁、截取左边/右边/中间字段、追加字段、格式转换、获取内容、比较等功能;

字符串类创建于销毁

String_T* wow_string_new(void)
{
	String_T* string = CALLOC(1, String_T);
	CHECK_RET_VAL_ERRNO_P(string,-SYSTEM_MALLOC_FAILED,"malloc String_T false!\n");

	string->size     = 0;
	string->capicity = 0;
	string->data     = NULL;
	if(string_resize(string,DEFALUT_STRING_SZIE) < 0){
		FREE(string);
		return NULL;

	}
	return (String_T*)string;
}

void wow_string_free(String_T** pptString)
{
	CHECK_RET_VOID(pptString && *pptString);

	String_T* string = (String_T*)*pptString;
	if (string->data){
		FREE(string->data);
		string->data = NULL;
	}
	
	FREE(string);
	*pptString = NULL;
}

截取左边/右边/中间字段

int wow_string_left(String_T* ptString,size_t snLen)
{
	CHECK_RET_VAL_P(ptString ,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
	CHECK_RET_VAL_P(snLen > 0 ,-PARAM_INPUT_ARG_INVALID,"param input arg invalid!\n");

	if(ptString->size > snLen){
		memset(&ptString->data[snLen],0,ptString->size - snLen);
		ptString->size = snLen;
	}
	
	return WOW_SUCCESS;
}

int wow_string_right(String_T* ptString,size_t snLen)
{
	CHECK_RET_VAL_P(ptString ,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
	CHECK_RET_VAL_P(snLen > 0 ,-PARAM_INPUT_ARG_INVALID,"param input arg invalid!\n");

	if(ptString->size > snLen){
		memmove(ptString->data,&ptString->data[ptString->size - snLen],snLen);
		memset(&ptString->data[snLen],0,ptString->size - snLen);
		ptString->size = snLen;
	}
	
	return WOW_SUCCESS;
}

int wow_string_mid(String_T* ptString,size_t snIdx, size_t snLen)
{
	CHECK_RET_VAL_P(ptString ,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
	CHECK_RET_VAL_P(snLen > 0 && snIdx < ptString->size ,-PARAM_INPUT_ARG_INVALID,"param input arg invalid!\n");

	if(ptString->size > (snLen +snIdx)){
		memmove(ptString->data,&ptString->data[snIdx],ptString->size - snLen);
		memset(&ptString->data[snLen],0,ptString->size - snLen);
		ptString->size = snLen;
	}else{
		memmove(ptString->data,&ptString->data[snIdx],ptString->size-snIdx);
		memset(&ptString->data[snLen],0,ptString->size-snIdx);
		ptString->size = ptString->size-snIdx;
	}
	
	return WOW_SUCCESS;
}

字符串类追加信息

int wow_string_append_data(String_T* ptString, const char* pcData) 
{
	CHECK_RET_VAL_P(ptString ,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
	CHECK_RET_VAL_P(pcData,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n");

	int snLen = strlen(pcData);
	if(ptString->size + snLen >= ptString->capicity) {
		if(snLen > ptString->capicity){
			string_resize(ptString,ptString->capicity + snLen);
		}else{
			string_resize(ptString,ptString->capicity * 2);
		}
	}
	strncpy(&ptString->data[ptString->size],pcData,snLen);
	ptString->size += snLen;
	
	return WOW_SUCCESS;
}


int wow_string_append_string(String_T* ptString, String_T* ptAadd) 
{
	CHECK_RET_VAL_P(ptString && ptAadd,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");;
	
	if(ptAadd->size >= ptString->capicity - ptString->size) {
		string_resize(ptString,ptAadd->capicity + ptString->capicity);
	}

	strncpy(&ptString->data[ptString->size],ptAadd->data,ptAadd->size);
	ptString->size += ptAadd->size;
	
	return WOW_SUCCESS;
}

字符串类格式转换

int wow_string_toBool(String_T* ptString,int* pnVal)
{
	CHECK_RET_VAL_P(ptString ,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");

	if (!strcmp(ptString->data, "1") || !strcasecmp(ptString->data, "y") || !strcasecmp(ptString->data, "yes") || !strcasecmp(ptString->data, "true")){
		*pnVal = 1;
		return WOW_SUCCESS;

	}else if(!strcmp(ptString->data, "0") || !strcasecmp(ptString->data, "n") || !strcasecmp(ptString->data, "no") || !strcasecmp(ptString->data, "false")){
		*pnVal = 0;
		return WOW_SUCCESS;
	}else{
		return PARAM_INPUT_ARG_INVALID;
	}
}


int wow_string_toInt(String_T* ptString,int* pnVal)
{
	CHECK_RET_VAL_P(ptString ,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");

	*pnVal = strtol(ptString->data,NULL,10);
	return WOW_SUCCESS;
}


int wow_string_toFloat(String_T* ptString,float* pfVal)
{
	CHECK_RET_VAL_P(ptString ,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");

	*pfVal = (float)strtod(ptString->data,NULL);
	return WOW_SUCCESS;
}
本关任务:编写一个程序实现凯撒加密。 相关知识 为了完成本关任务,你需要掌握:1.string库,2.maketrans() 函数,3.translate()函数。 String 模块 要使用string模块,我们需要先导入: import string 下面介绍几个string的内置属性: string.ascii_uppercase 所有大写字母 string.ascii_lowercase 所有小写字母 string.ascii_letters 所有字母 string.digits 所有数字 示例如下: import string lower = string.ascii_lowercase upper = string.ascii_uppercase digit = string.digits before = string.ascii_letters 输出: abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ maketrans() 和 translate() 由于两个函数要结合使用,所以就一起介绍了。 maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 注:两个字符串的长度必须相同,为一 一对应的关系。 maketrans()方法语法: str.maketrans(intab, outtab) 参数 intab -- 字符串中要替代的字符组成的字符串。 outtab -- 相应的映射字符的字符串。 返回值 返回字符串转换后生成的新字符串。 translate() 方法根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 del 参数中。 translate()方法语法: str.translate(table[, deletechars]) 参数 table -- 翻译表,翻译表是通过maketrans方法转换而来。 deletechars -- 字符串中要过滤的字符列表。 返回值 返回翻译后的字符串。 示例如下: 示例一: intab = "aeiou" # 原字符 outtab = "12345" # 用于替换的字符 # 想要加密的字符串的明文 txt = "this is string example....wow!!!" # 创建映射转换表 # 将明文中字符"a、e、i、o、u"分别替换为"1、2、3、4、5",其他字符不变 trantab = ''.maketrans(intab, outtab) # 输出加密后的结果 print(txt.translate(trantab)) 输出: th3s 3s str3ng 2x1mpl2....w4w!!! 示例二: intab = "abcdefghijklmnopqrstuvwxyz" # 原字符 outtab = "defghijklmnopqrstuvwxyzabc" # 用于替换的字符 # 想要加密的字符串的明文 txt = "this is string example....wow!!!" # 创建映射转换表,用后面第3个字符替换 trantab = ''.maketrans(intab, outtab) # 输出加密后的结果 print(txt.translate(trantab)) 输出: wklv lv vwulqj hadpsoh....zrz!!! 输入输出格式 输入格式 输入为一行,是一个字符串。 输出格式 输出为一行,对输入的字符串进行加密后的字符串。 编程要求 根据提示,在右侧编辑器补充代码,实现凯撒加密:输入一个字符串,对字符串中的字母和数字进行加密(规定加密偏移量为3,即后移三位),并输出加密后的字符串。 测试说明 平台会对你编写的代码进行测试: 测试输入:Open Box PassWord:2021 预期输出:Rshq Era SdvvZrug:5354 给出完整代码
05-28
### 实现凯撒加密的完整Python代码 以下是一个完整的Python代码示例,使用`string`库中的`maketrans()`和`translate()`函数实现字符串加密。该代码对输入字符串中的字母和数字进行加密,偏移量为3。 ```python import string def caesar_cipher(text, shift=3): """实现凯撒加密,对字符串中的字母和数字进行偏移加密""" lower = string.ascii_lowercase # 小写字母表 upper = string.ascii_uppercase # 大写字母表 digits = string.digits # 数字表 # 构建加密后的字符表 lower_shifted = lower[shift:] + lower[:shift] # 小写字母偏移 upper_shifted = upper[shift:] + upper[:shift] # 大写字母偏移 digits_shifted = digits[shift:] + digits[:shift] # 数字偏移 # 创建映射关系表 before = lower + upper + digits # 原始字符集合 after = lower_shifted + upper_shifted + digits_shifted # 加密后的字符集合 table = str.maketrans(before, after) # 映射表 # 使用translate()函数完成加密 ciphertext = text.translate(table) return ciphertext if __name__ == '__main__': plaintext = input("请输入待加密的字符串: ") encrypted_text = caesar_cipher(plaintext) print(f"加密后的字符串: {encrypted_text}") ``` ### 代码解析 1. **字符表定义** - 使用`string.ascii_lowercase`生成小写字母表[^1]。 - 使用`string.ascii_uppercase`生成大写字母表[^1]。 - 使用`string.digits`生成数字表[^1]。 2. **偏移逻辑** - 对小写字母、大写字母和数字分别进行偏移操作。例如,对于小写字母`lower`,通过切片`lower[shift:] + lower[:shift]`实现偏移。 - 同样地,大写字母和数字也采用相同的偏移方式。 3. **映射表构建** - 将原始字符集合`before`与加密后的字符集合`after`通过`str.maketrans()`创建映射表[^3]。 4. **加密实现** - 使用`str.translate()`方法根据映射表完成加密操作[^3]。 5. **用户交互** - 程序从标准输入读取明文字符串,并输出加密后的结果。 ### 示例运行 #### 输入: ``` 请输入待加密的字符串: Hello World! 2023 ``` #### 输出: ``` 加密后的字符串: Khoor Zruog! 5356 ``` ### 注意事项 - 如果输入字符串包含非字母和非数字字符(如标点符号),这些字符将保持不变[^1]。 - 偏移量可以通过函数参数`shift`进行调整,默认值为3。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值