C++中string.length()

C++中string.length()返回类型是size_t,可以简单地认为是unsigned int 类型,即无符号类型,如果不经过转换就拿它和有符号类型进行比较,很容易发生错误。例如无符号整型i的值为0,当它减一的时候由于编码问题会变得很大,这样在比较的时候就会发生问题。
例:

string s = "123";
int j = -1;
if( j < s.length() )
{
    cout << "j<s.length" << endl;
}

这里编译器会对j或者s.length()的返回值做强制类型转换,编译器会把有符号数转换为无符号数,相当于

string s = "123";
int j = -1;
if( (size_t)j < s.length() )
{
    cout << "j<s.length" << endl;
}

那么,当j=-1时,j被自动转换为无符号数.
解决这个问题的最简单办法,就是显示地将无符号数转换为有符号数:

string s = "123";
int j = -1;
if( j < (int)s.length() )
{
    cout << "j<s.length" << endl;
}

例:字符串压缩:利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

在这里插入图片描述

string compressString(string s) {
	if ((int)s.length() == 0) return s;
	string ans = "";
	char ch = s[0];
	int cnt = 1;
	for (int i = 1; i < (int)s.length(); i++) {
		if (ch == s[i]) cnt++;
		else {
			ans += ch + to_string(cnt);
			ch = s[i];
			cnt = 1;
		}
	}
	ans += ch + to_string(cnt);
	return ans.length() <= s.length() ? ans : s;
}

注:Java版本解法:

public string compressString(string s){
	if(s.length()==0)  return s;
	StringBuffer ans=new StringBuffer();
	char ch=s.charAt(0);
	int cnt=1;
	for(int i=1;i<s.length();i++){
		if (ch == s.charAt(i)) cnt++;
		else {
			ans,append(ch);
			ans.append(cnt);
			ch = s.charAt(i);
			cnt = 1;
		}
	}
	ans,append(ch);
	ans.append(cnt);
	return ans.length() <= s.length() ? ans.toString() : s;
}
def compressString(self,s:str)->str:
	if not s: 
		return ""
	ans = ""
	ch = s[0]
	cnt = 0
	for c in s
		if ch==c:
			cnt += 1
		else:
			ans += ch + str(cnt)
			ch = c
			cnt = 1
	ans += ch + str(cnt)
	return ans if len(ans)<=len(s) else s
	

注:Python的类型——

int,long,float: 整型,长整形,浮点型

bool,str: 布尔型,字符串类型

List, Tuple, Dict, Set:列表,元组,字典, 集合

Iterable,Iterator:可迭代类型,迭代器类型

Generator:生成器类型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值