C++字符串数组中的字符串长度与int数组内的数字比较之间的问题

任何一个新手都可以看懂的代码,却出现一个小学数学的bug,有哪位大神能告诉我为什么,我真的很惶恐
图片说明

 int main(){
    //freopen("in.txt","r",stdin);
    int Max[2];
    for(int i = 0 ; i< 2 ;i++){
        Max[i] = -1;
    }
    string s[2][2];
    cin>>s[0][0];
    if(s[0][0].length()>Max[0]){
        cout<<"string"<<s[0][0]<<"的长度"<<s[0][0].length()<<"大于"<<Max[0]<<"\n";
    }
    if(s[0][0].length()<Max[0]){
        cout<<"string"<<s[0][0]<<"的长度"<<s[0][0].length()<<"小于"<<Max[0]<<"\n";
    }
}

3个回答

原因很简单。
string类的length()函数的返回类型为size_type。而size_type被定义成无符号类型,通常就是unsigned int,具体的就得看操作系统。
而int默认是有符号类型。

所以下面这句:

 if(s[0][0].length()>Max[0])

实际上就是 大于号左边为无符号数,右边为有符号数。

C++里又有一条规则:当有符号数与无符号数放在一起运算时,总是都转换成无符号数。所以啊,大于号右边的-1被转成了无符号数,那貌似就是最大无符号数了啊。大于号不成立就很正常了。

第一次回答问题,望采纳。

m0_37632283
眼里一片海 明白了,Thanks♪(・ω・)ノ
大约一年之前 回复

你用C编译一下,为什么我的没错

size_type与unsigned int类型不匹配造成的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++字符串数组中的字符串长度与int数组内的数字比较之间的问题
任何一个新手都可以看懂的代码,却出现一个小学数学的bug,有哪位大神能告诉我为什么,我真的很惶恐n![图片说明](https://img-ask.csdn.net/upload/201807/22/1532249358_293157.png)nn```n int main()n //freopen("in.txt","r",stdin);n int Max[2];n for(int i = 0 ; i< 2 ;i++)n Max[i] = -1;n n string s[2][2];n cin>>s[0][0];n if(s[0][0].length()>Max[0])n cout<<"string"<
合并数组内的对象的数字
### 标准用法 ``` const oa = require('object_array') oa([{a:1,b:2,c:3},{a:4,b:5,d:6}])//{a:5,b:7,c:3,d:6} oa([{a:{a1:1,b1:2},b:2},{a:{a1:3,a2:4,a3:5}},c:{c:10}}])//{a:{a1:4,b1:2,a2:4,a3:5},b:2,c:{c:10}}...
iOS开发之数组内数字字符串排序
NSMutableArray *priceArray = [NSMutableArray arrayWithObjects:@&quot;0.2&quot;,@&quot;5&quot;,@&quot;44&quot;,@&quot;67&quot;,@&quot;98.5&quot;,@&quot;1.55&quot;, nil]; [priceArray sortUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2
数组内的数据比较问题(数据库相关)
首先,我要利用这个函数来比较三个数组内的内容:rn$result = array_intersect($array1,$array2,$array3);rn这里 $array1 = array(1,2,3,4,5); $array2=array(1,2,3,4,6);$array3=array(1,3,4,5,6,7,8);rn可以通过array_intersect这个函数得到他们三个相同的元素,rn数据库查询语句:rn$sql = "select terminal_id from terminal_status_log where online = 0 and log_date = (select curdate())"; //terminal_status_log 表里有3个字段:log_date,terminal_id,online ;rn也就是说会查出来很多满足查询条件的terminal_id 如 ter000001,ter000002,ter000003....,rn现在我想知道怎么用这些ter000001 ter000002..替换点上面的 $array1 = array(1,2,3,4,5); 中的1,2,3,4,5以用来比较满足其他查询条件的查询语句查出来的terminal_id号,rn涉及到数组的操作,转换来转换去都不太灵光,望指教rn
求教,一个数组内的数字比较问题
string类型字符串,用 | 隔开的(string spe="1|1|2|1|1")rn格式化成数组rnstring[] sp = spe.Split('|');rnrn[color=#FF00FF]数组长度>=2,长度无限制。[/color]rnrn如何判断数组内的值是否都一样?rnrnrnrnrnrn
字符串数组和结构体中字符串数组的比较
struct wordrnchar a[100];rnchar b[100];rn *p;rnint count=0;rnchar s[100];rnfor(i=0;i
Integer及int之间的比较
面试期间问了Integer和int之间各种情况的比较,发现有不确定的,然后试验了所有情况,整理如下代码,如有问题请指出。public static void main(String[] args) { Integer a = 1;//默认调用valueOf 装箱 会使用缓存 Integer b = 1; Integer c = new Integer...
Integer和int之间的==比较
int 是Java的八种基本数据类型中的一种, 八种基本数据类型分别为 byte short int long float double char boolean  对应的包装类分别为 Byte Short Integer Long Float Double Character Boolean。  Integer 就是int所对应的包装类,它是一个对象。 看看下面这道题,代码如下:
数组内数求余?
一数组m1(i) 输出小于30的i的余数, rn如输入m1=(1,2,3),则输出. rn rnm2=(1,11,21,2,12,22,3,13,23)
求助,如何比较浮点型数组内的值
脚本如下:rn#!/bin/bashrndeclare -a abrnab=(40.47 41.07 40.83 9.70 40.72 40.81 40.61 40.93 41.20 40.41 40.99 41.11 40.82)rnecho "$ab[@]"rnfor i in $ab[@]rndornif [ $fps[i] < 24 ];thenrnecho doornelse echo deernfirndonern运行后出现报错rn[root@node72 home]# ./1.sh rn40.47 41.07 40.83 9.70 40.72 40.81 40.61 40.93 41.20 40.41 40.99 41.11 40.82rn./1.sh: line 7: 40.47: syntax error: invalid arithmetic operator (error token is ".47")rn请问各位大神,我想在if判断中逐个取出数组内的值并进行if判断,这个该如何求解?
请教高手:数组内点的比较
#includernusing namespace std;rnint bijiao()//比较两点是否相等rnint main()rnrn int w1[4][3]=1,2,3,2,3,5,5,6,4,7,5,6;rn int w2[3][3]=1,2,3,2,3,4,5,5,6;rn int w3[2][3]=1,2,3,5,6,4;rnrn rnrnint bijiao()rnrnrnrn函数int bijiao()的目的是对数组W1与W2、W1和W3内的点进行比较,rn并返回数组W1与W2、W3相同的点的个数,rn请问该如何编写int bijiao()函数??rn
数组内的值比较大小的疑问
看到支付宝接口ASP文档中对一个数组排序,不理解,求助。rnrn代码如下:rnrnsParaTemp = Array("name=jack","id=1")rnrnif sparatemp(0)>sparatemp(1)thenrnresponse.writre"true"rnelsernresponse.write"false"rnend ifrnrn我现在不理解的是sparatemp(0)>sparatemp(1),这怎么比较的。sParaTemp(0)就是"name=jack",sparatemp(1)就是"id=1","name=jack"与"id=1"怎么能比较大小呢?求解,谢谢rnrn
字符串数组的比较???compareTo()的问题
定义如下:老是提示类型不兼容,为什么呢??rnclass Textrnrn public static void main(String []args)rn rn rn String str="ying";rn String []temp=new String[3];rn temp[0]="cheng";rn temp[1]="ying";rn temp[2]="woshi";rn for(int i=0;i<3;i++)rn rn if(str.compareTo(temp[i]))rn System.out.print(i);rn rn』
__int64 和 int 之间如何比较?
遇到了这样的问题.rn有一个 __int64 的变量的值 应该是 -1. 可是在取出来后却是 4294967295. 但是如果 用 CString的 formart 格式化后,字符串 仍然是 "-1" . 我现在需要 这个 __int64 的变量和 -1 等整数比较. 请问应该怎么转化?rn
C#字符串数组的比较问题。。。
遍历两个Arraylist中的字符串对(w,t),把这个对以及它出现的次数保存到哈希表中。rn rn先看程序:rnrn foreach (string w in arrdw) //此处arrdw和arrdt为ArrayList,其中保存了若干个英文单词。 rn rn foreach (string t in arrdt)rn rn if (w == t) //如果两个单词重复,则跳过,不进行计算。rn rn Console.WriteLine("word----term: 0", w);rn continue; rn rn elsern rn string[] a = w,t; //建立一个字符串组保存两个单词w,trn if (htwt[a] == null) //如果这对单词第一次出现在哈希表中,则他们的值等于1; rn rn htwt[a] = 1;rn rn else //如果不是第一次,则他们的值加一;(**)rn rn htwt[a] = (int)htwt[a] + 1;rn Console.WriteLine("word:0--------term: 1------------Num: 2", w, t, (int)htwt[a]);rn rn rn rn rn 程序就出现在两个*的那个位置,里面的代码不被运行, 即使出现了跟之前相同的单词对也不进行加值。 而是当做第一次出现保存到哈表中并赋予值“1”。 最后运行出来的结果是, 不管哈希表中的key是什么,他们的value全是“1”。rn 是不是因为我在定义字符串组的时候出现了问题, 希望大家能给看看, 不知道怎么改啊~~~ 谢谢大家,给点建议~~~
字符串数组比较的问题
向各位请教个问题:rnrn我有这样一组数字,rn第一组:(A,x1,y1,z1,)rn第二组:(B,x2,y2,z2,)rn第二组:(C,x3,y3,z3,)rn。rn。rn。rn对数组的后三个数字进行对应比较(x进行比较,y进行比较,z进行比较),如果完全相同(例如:x1=x2,y1=y2,z1=z2),则显示A和B。rn请问各位:这个怎么实现啊?!rnrn多谢各位!
数组内的数据保存到数据库的问题
我想实现以下功能,通过chkid.asp获取到user表中有多少用户以及每个用户的idrn然后在save.asp中根据用户多少批量存储数据,除了用户id有变化,其他数据都一样.rn通过数组将user表中的用户id读取出来,但是在save.asp中添加时遇到了问题.每次都只添加最后一位的用户ID,请大家帮我看看rnrn代码如下.chkod.asprnrn rnrn <%rn Public MyArry() rn dim conn rn dim connstr rn dim sql rn dim rs rn sql="select * from user"rn rs.open sql,conn,1,3rn total=Rs.recordcountrn Do while not rs.eof rn ReDim MyArry(total)rn MyArry(total)=rs("opid")rn response.write MyArry(total)rn rs.movenextrn looprn rs.closern %> rn call error()rnrn Next rnrnrnsave.asp代码rnrn rn rn rn <%rn rn dim H_namern dim H_moneyrn dim H_picrn dim H_classrn H_name=trim(request.form("txt_cpname"))rn H_money=trim(request.form("txt_money"))rn H_pic=trim(request.form("txt_pic"))rn H_class=trim(request.form("class2"))rn set rs1=server.CreateObject("adodb.recordset") rn sql="select * from class3" rn rs1.open sql,conn,1,3rn rn For j = 1 To total rn rs1.addnewrn rn rs1("h_name")=H_namern rs1("h_money")=H_moneyrn rs1("h_pic")=H_picrn rs1("h_class")=H_classrn rs1("h_operationid")=MyArry(total)rn rs1.updatern rn call error()rnrn Next rn rn rn %>rn
mongo数组内唯一索引的问题
之前一直认为通过唯一唯一索引可以确保doc数组字段的每个doc确保唯一(根据某个字段)如: staffs: [staffRoleSchema], const staffRoleSchema = new Schema({ openid: { type: String, index: { unique: true }, sparse: true }, privilege: { ty
Integer,int 数字进行比较
背景:两个Integer的数字进行比较,有时返回为true,而有时返回为false。比如以下情况:       1.   String s = new String("127");            flag= Integer.valueOf(s.trim()) == Integer.parseInt("127");            System.out.println("==
字符串数组的比较
char str1[] = "abc";rnchar str2[] = "abc";rnconst char str3[] = "abc"; rnconst char str4[] = "abc"; rnconst char* str5 = "abc";rnconst char* str6 = "abc";rnrncout << boolalpha << ( str1==str2 ) << endl; rncout << boolalpha << ( str3==str4 ) << endl; rncout << boolalpha << ( str5==str6 ) << endl; rnrn请问为什么str1!=tr2, str3!=str4 and str5 == str6s?
字符串数组比较
现有N个字符串数组,诸如下列rn1100 0100 1101 0011 [color=#FF0000]110[/color]0 0100 1000 0000 0000 0000 0010 0100 1100 0000 1000 0000 0101 0000 0000 0000 0000 0000 1000 0000 0000 1000 0001 1010rn1100 0100 1101 0011 [color=#FF0000]101[/color]0 0100 1000 0000 0000 0000 0010 0100 1100 0000 1000 0000 0101 0000 0000 0000 0000 0000 1000 0000 0000 1000 0001 1010rn1100 0100 1101 0011 [color=#FF0000]011[/color]0 0100 1000 0000 0000 0000 0010 0100 1100 0000 1000 0000 0101 0000 0000 0000 0000 0000 1000 0000 0000 1000 0001 1010rn现在想比对这些字符串不同之处,并获取其(红字)索引值,怎么实现?用linq更好,
对调数组内的元素
/* 对调数组内的元素 */ public class Demo7{ public static void main(String [] args){ int [] arry={1,2,3,4,5,6,7,8}; int [] away=replace(arry); print(away); } public static...
向数组内添加数据
我自己定义了一个类、里面定义了几个数组、我现在想从已有的数据表(list)里给数组赋值,应该怎么做呢?rn[code=csharp]rnpublic class EchartOptionrnrn public Array GroupA get; set; rn public Array GroupB get; set; rn public Array GroupC get; set; rn public Array GroupD get; set; rnrn[/code]rnrn[code=csharp]rnvar list = AEMS10RunBll.GetList(num, dtStart, dtEnd).ToList();rn[/code]rnrn我用我自己的方法总是提示无法对属性或索引器赋值、因为是只读的
数与数之间比较大小的思路
按照计算机思维确保输入的数从小到大或者从大到小排列, 比如三个数比较大小,可以假设,num1,num2num3,num4 先确保num1比他们所有都小,如果其中一个比num1小,则和num1调换位置 然后确保num2比num3,num4小,如果有比num2小的,则和num2调换位置 然后确保num3比num4小,如果比num3小则和num3调换位置 最后按照顺序输出,则可以得到从
输出数组内中文字符
使用分类 在.m文件@end 之后加入 @implementation NSMutableArray(MyChArr) - (NSString *)descriptionWithLocale:(id)locale { NSMutableString *strM = [NSMutableString string]; [strM appendString:@"(\n"];
VB 数组内平移
VB 数组内平移 VB 数组内平移 VB 数组内平移
数组内元素操作
数组中元素rn600,700,700,700,800,700,700,800rnrn如何把相邻且相同的元素合并,倒序重排rnrn得到如下结果rn800,2*700,800,3*700,600
数组内查找
渣渣起步阶段(you got what you paid for)方法一:(太麻烦了)//美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄, //他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次...
正则表达式的两数字之间的数
正则表达式,两个数字之间的数
数数字~c语言
题目: 把n(n&amp;lt;=10000)个整数顺次写在一起:123456789101112~~~数一数0~9各出现了多少次(输出10个整数,分别是0,1,2,3,~,9出现的次数。)   #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;string.h&amp;gt; char s[10010]; int main() {     int a[10];     int j;  ...
C语言的字符串长度问题
#includern#includernvoid main()rnrn char p[]='a','b','c',q[10]="abc";rn printf("%d %d\n",strlen(p),sizeof(q));rnrn运行结果是7和10,为什么不是3和10呢???求大神指点!
关于C的字符串长度的问题
我声明了一个长度为10的字符串,然后用gets函数去获取用户输入。rnchar a[10];rngets(a);rn但是为什么用户输入长度为23以下的字符串都不会使程序发生崩溃,那其中的13个字符的内存空间本身是用来干嘛的?
关于VS2010中宽字符问题 CStringArray 与 int数字比较
void CSchoolDlgSM::OnBnClickedBtnNext()rnrn CString str,str2;rn str=m_sRightAnswer.GetAt(m_questionNo-1);rn str2.Format("%d",m_radio_answer);rn //if(str==m_sRightAnswer.GetAt(m_questionNo-1))rn // TODO: 在此添加控件通知处理程序代码rnrn这个为提交函数rnm_sRightAnswer 为CStringArray型rn取出第(m_questionNo-1)题目的答案 然后与 Radio控件的int答案对比 对了就给分 不对就不给分rn现在是 str2.Format("%d",m_radio_answer); rn本人估计 就是宽字符问题 刚开始做这个的时候 就不该选那个 可是现在选了 其他一些东西都改成了宽字符类型来应用rn这个是最后一个问题了 有没有好的方法或者建议 贴出这个的比较的函数代码 即可 谢谢!rn有错误 错误如下rnrn1>------ 已启动生成: 项目: School, 配置: Debug Win32 ------rn1>生成启动时间为 2011-1-7 10:22:13。rn1>InitializeBuildStatus:rn1> 正在对“Debug\School.unsuccessfulbuild”执行 Touch 任务。rn1>ClCompile:rn1> 所有输出均为最新。rn1> SchoolDlgSM.cpprn1>d:\我的文档\visual studio 2010\projects\shool\shool\schooldlgsm.cpp(70): error C2664: “void ATL::CStringT::Format(const wchar_t *,...)”: 不能将参数 1 从“const char [3]”转换为“const wchar_t *”rn1> withrn1> [rn1> BaseType=wchar_t,rn1> StringTraits=StrTraitMFC_DLLrn1> ]rn1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换rn1>d:\我的文档\visual studio 2010\projects\shool\shool\schooldlgsm.cpp(74): error C2143: 语法错误 : 缺少“;”(在“”的前面)rn1>d:\我的文档\visual studio 2010\projects\shool\shool\schooldlgsm.cpp(74): warning C4390: “;”: 找到空的受控语句;这是否是有意的?rn1>rn1>生成失败。rn1>rn1>已用时间 00:00:00.48rn========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========rn
字符串数组的比较及联合体字节对齐问题
1.unionrnrnint i;rnchar j[10];rnfloat k;rnu;rn为什么是sizeof(u)=12呢?怎么个对齐法?和struct有什么不一样吗?rnrn2.int pstrcmp(const void *p1, const void *p2)rnrnreturn strcmp(*(char * const *)p1, *(char * const *)p2);rnrn高手能解释一下这个字符串数组的比较函数吗?(尤其是那转化的问题)rn
arrayList与数组内的元素表示(java中)
java的arrayList是不能用下标直接访问的 arraylist与数组的区别: 数组: 数组名为A ,则数组A的元素应该这样表示A[0],A[1],A[2]; 而arrayList则非如此,arrayList中的表示为:arrayList.get(0), arrayList.get(1), arrayList.get(2) ...
Velocity 判断比较字符串长度
&amp;lt;div id=&quot;districtAreaDiv&quot; class=&quot;stayInAreaDiv fenlei_bg brightblue18 size16&quot;&amp;gt; &amp;lt;ul&amp;gt; #foreach($!district in $!districts) #if($!{district.length()} &amp;gt; 9) ...
C字符串数组问题
[code=c]rn#include rnusing namespace std;rnrnint main()rnrn char c[6] = "hello";rnrn c = "s"; //为什么c是不可被修改的左值rn c[2] = 's'; //而c中的元素都可以被修改?rnrn return 0;rnrn[/code]
c语言字符串数组问题
例如rn我定义一个固定长度的字符数组,例如长度为char name[100];rn从键盘输入用户名scanf(name),赋值给这个数组.rn请问如何判断我输入用户名的合法性,即不能包括除了大写和小写的26个字母以外的所有字符.rn多谢指教
c语言的字符串数组问题
搞了很久JAVA,发现已经把C语言忘光了,卡在一个问题上rn[code=c]rn#include rnint main(int argc, char *argv[]) rn static const char *classPathName = "com/android/browser/BrowserUtil";rn static const char *hotkeyclassName = "com/iiu/setting/hotkey/MouseUtil";rn static const char *className[2] = classPathName, hotkeyclassName;rn rn int i = 0;rn for(i=0; i < 2; i++)rn rn printf("%s\n", className[i]);rn rn return 0;rnrn[/code]rn上面代码编译出错了,我想在className数组里添加字符串指针,要怎么改才对?
unsigned int类型的数和0比较大小?
#includernrnint main ()rnrn unsigned int i;rnrn for(i = 9; i >= 0; --i)rn rn printf("%u\n", i);rn rnrn return 0;rnrn结果是rn9rn8rn7rn6rn5rn4rn3rn2rn1rn0rn4294967295rn……rn后面是是循环rnunsigned int类型的数能不能和0比较大小??如果能的话是怎么比的?
相关热词 c# login 居中 c# 考试软件 c# 自然语言分析 c# 分段读取文件 c# 泛型反射 c#打断点 c# 时间转多少秒 c# 线程函数加参数 c# modbus 读取 c#查询集合表