题目:
一. 给出一个不多于5位的整数,要求:
1、求出它是几位数
2、分别输出每一位数字
3、按逆序输出各位数字,例如原数为321,应输出123
4、如果要求是任意位数,又怎么处理
下面是常规思路:
#include"iostream"
using namespace std;
int main(){
int x,count=1;//最先处理的一次不用除以10,所以count=1
int a[6];//指定了数组的大小,对于第四个问题无法解决
//当然你也可以定义一个很大的数组,但浪费空间!
cin>>x;
a[0]=x%10;//注意:这里取余求得是最后一位,列如:12345,则为5
while(x/=10){ //x为int,除以10为1234.5,但系统会自动处理为1234
a[count++]=x%10;//取得的余数,存入数组,列如:12345,数组存入是54321
}
cout<<count<<endl;
for(int i=count-1;i>=0;i--){//count先减,while()处默认最后count++
cout<<a[i]<<' ';
}
cout<<endl;
for(int i=0;i<count;i++){//注意这里不是"<=",因为数组是从零开始的
cout<<a[i];
}
return 0;
}
这里是使用字符数组的方式:
二. string的大小和容量:(补充知识)
1.strlen()求出的字符数组长度为有效长度,不包含字符串末尾结束符 ‘\0’;
2.length()函数可用于求字符串的有效长度
提醒:c语言中没有字符串,用的是字符数组
2.sizeof()操作符求出的长度包含字符串末尾的结束符 ‘\0’;
当在函数内部使用sizeof()求解由函数的形参传入的字符数组的长度时,得到的结果为指针的长度,既对应变量的字节数,而不是字符串的长度,此处一定要小心
下面为函数的使用方法:
strlen(str) //假设str为待求的**字符串数组名**
str.length()//假设str为待求的**字符串名**
sizeof()//可以用于求字符数组与字符串的长度,但是尽量不用sizeof
//或者不能用它来求字符串长度
//代码演示
#include"iostream"
#include"string.h"
using namespace std;
int main(){
char a[10];
string b;
cin>>a>>b;
cout<<strlen(a)<<' '<<sizeof(a)<<endl;
cout<<b.length()<<' '<<sizeof(b);
return 0;
}
sizeof为什么求得的结果是32?
string的实现在各库中可能有所不同,但是在同一库中相同一点是, 无论你的string里放多长的字符串,它的sizeof()都是固定的, 字符串所占的空间是从堆中动态分配的,与sizeof()无关。 sizeof(string)=4可能是最典型的实现之一, 不过也有sizeof()为12、32字节的库实现。 但是vscode测试后>sizeof(string)=16.还是跟编译器有关
字符数组的实现代码:
#include "iostream"
#include "string.h"
using namespace std;
int main(){
char a[10];
cin>>a;
int len=strlen(a);
cout<<len<<endl;
for(int i=0;i<len;i++){
cout<<a[i]<<' ';
}
cout<<endl;
for(int j=len-1;j>=0;j--){//数组是从0开始的
cout<<a[j];
}
return 0;
}
如有裨益,吾之幸也。刚入们如有不足望大家指正 !祝大家编程进步。