c++ string类length()(size())函数返回值–无符号数

首先,先来发现问题

string s = "";
for(int i = 0; i < s.length() - 1; ++i)
{
cout << "s.length = " <<s.length() << endl;
break;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输出结果:

s.length = 0

显然,这句话不该输出。通过查看QT编译器下面的警告发现,

string类的length()或者size()函数返回的是unsigned integer(无符号数)类型。而用在for循环时,正常不会出错,但作为判断条件时,当s.length()等于0时,s.length()-1 不等于 -1

例2

string s = "";
for(int i = 0; i < s.length() - 1; ++i)
{
cout << "s.length - 1 = " << s.length()-1 << endl;
break;
}
  • 1
  • 2
  • 4

输出结果:

s.length()-1 = 4294967295

例3

可以将例2中代码改为如下,强制类型转换一下。

string s = "";
for(int i = 0; i < (int)s.length() - 1; ++i)
{
cout << "(int)s.length - 1 = " << s.length()-1 << endl;
break;
}
#include <cstring>
#include <iostream>
using namespace std; int main(){
string a, b, c;
cin >> a >> b;
for(int i = 0; i <= (int)a.length()/2 - 1; i++)
swap(a[i], a[a.length() - i - 1]);
// int lenb = b.length();
for(int i = 0; i <= (int)b.length()/2 - 1; i++){ //string类的length()或者size()函数返回的是
//unsigned integer(无符号数)类型。而用在for循环时,
//正常不会出错,但作为判断条件时,
//当s.length()等于0时,s.length()-1 不等于 -1
swap(b[i], b[b.length() - i - 1]);
// cout << b.length() / 2 - 1 << endl;
}
if(a.length() > b.length())
b.append(a.length() - b.length(), '0');
else
a.append(b.length() - a.length(), '0');
char str[13] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'J', 'Q', 'K'};
for(int i = 0; i < a.length(); i++){
cout << "i: " << i << endl;
if(i % 2 == 0){
c += str[(b[i] - '0' + a[i] - '0') % 13];
}
else{
int k = b[i] - a[i];
if(k < 0)
k += 10;
c += str[k];
}
}
for(int i = c.length() - 1; i >= 0; i--)
cout << c[i];
return 0;
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输出结果:

(int)s.length - 1 = -1

总结:string类的length()函数和size()函数一定要注意返回的是无符号数,当出现string对象length为0,对于string对象的操作更要注意,以防出错

10-string类的length()返回值一起的问题的更多相关文章

  1. string类find函数返回值判定

     string类find函数返回值判定 代码示例 #include<iostream> #include<cstring> using namespace std; int m ...

  2. 05_整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明

    Question: 整理String类的Length().charAt(). getChars().replace(). toUpperCase(). toLowerCase().trim().toC ...

  3. 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl

    因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Compl ...

  4. c++ 模板类,方法返回值类型是typedef出来的,或者是auto,那么此方法在类外面如何定义?

    c++ 模板类,方法返回值类型是typedef出来的,或者是auto,那么此方法在类外面如何定义? 比如方法max1的返回值是用typedef定义出来的mint,那么在类外如何定义这个方法呢? tem ...

  5. String的compareTo()方法返回值

    compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的 差值,如果第一个字符和参数的第一个字符相等,则以第二 ...

  6. (转)SpringMVC学习(七)——Controller类的方法返回值

    http://blog.csdn.net/yerenyuan_pku/article/details/72511844 本文所有案例代码的编写均建立在前文SpringMVC学习(六)——SpringM ...

  7. 理解String的compareTo()方法返回值

    compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序), 如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值. 如果第一个字符和参数的第一个字符相等,则以第 ...

  8. String.equals()方法、整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()

    equals 是比较的两个字符串是否一样 length() 返回字符串的长度 charAt (int index) 返回index所指定的字符 getChars(int srcBegin,int sr ...

  9. Android中Service类onStartCommand的返回值问题

    Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStart ...

随机推荐

  1. Spring Security编程模型

    1.采用spring进行权限控制 url权限控制 method权限控制 实现:aop或者拦截器(本质就是之前之后进行控制)--------------------proxy就是 2.权限模型: 本质理 ...

  2. android 系统架构简介

    Android系统采取的是分层的架构,根据官方文档提供的架构图,我们将android的系统架构分成5层,如图: 1.Application Framework (应用框架) application f ...

  3. Nature | 光学CNN层替换传统CNN层,超省电

    CNN 计算效率的研究一直备受关注,但由于功率和带宽的严格限制,CNN 仍难以应用在嵌入式系统如移动视觉.自动驾驶中.在斯坦福大学发表在 Nature 旗下 Scientific Reports 的这 ...

  4. 时间模块 --- time

    表示时间有三种方法:timestamps  Format String    struct-time 1 时间戳 :通常来说,时间戳表示的是从1970年一月一日00:00:00开始按秒计算的偏移量,使 ...

  5. sqlserver主从复制

    参考网站: http://www.178linux.com/9079 https://www.cnblogs.com/tatsuya/p/5025583.html windows系统环境进行主从复制操 ...

  6. js1:根据标签的Id获取value值

    例子:<input id="startDate" name="startDate" value="2015-09-14" class= ...

  7. redis、memcache和mongodb各自的优缺点是什么

    redis.memcahce 比较相似,但与 mongodb 完全不同,几乎没有可比性. 总的来说 redis/memcache 是基于内存的,讲究的是性能,多用作缓存层,比如说存放session.而 ...

  8. JSON.Stringify()和JSON.parse()的比较使用

    1.  JSON.Stringify() 将一个对象解析成字符串 <script> function myonclick() { var value = $('select option: ...

  9. shrio Subject的认证

    注意:shiro的认证只是获取用户名和密码,具体的匹配由shiro来完成

  10. 机器学习入门-交叉验证选择参数(数据切分)train_test_split(under_x, under_y, test_size, random_state), (交叉验证的数据切分)KFold, recall_score(召回率)

    1. train_test_split(under_x, under_y, test_size=0.3, random_state=0)  # under_x, under_y 表示输入数据, tes ...