1.3日:字符串与数字相互转换
原理——数字字符(本质就是ASCII码)减去0的ASCII码值得到的数值大小就是数字本身
int m=0;
for(int i=lenb-1;i>=0;i--){
ans+=(b[i]-'0')*pow(10,m); //字符串转数字
m++;
}
long long x=123456789,tem; //数字转字符串 感觉这个不常用
tem=x;
int len=0;
while(tem){
len++; //先找数字位数
tem/=10;
}
for(int i=len-1;i>=0;i--){
a[i]=(x%10)+'0';
x/=10;
}
puts(a);
对n个字符串输出最短的
(这时候就必须得二维数组派上用场啦
#include <bits/stdc++.h>
using namespace std;
char a[1010][1010];
int main(){
int n,flag=0;
cin>>n; //经测试这里虽然不是scanf但是依然需要吸收回车。。
getchar();
for(int i=0;i<n;i++){
gets(a[i]);
if( strlen(a[i]) < strlen(a[flag]) )
flag=i;
}
puts(a[flag]);
return 0;
}
1.5日记
昨天打了一天游戏,事实证明果然打游戏没法让我找到快乐。。
继续敲代码,今日flag:刷到两百道(还剩32道) 今晚十一点回来验收
十进制转换二进制并存到字符数组里
void convert(int n, char a[]){
int num=0,i=0;
if(n!=0){
while(n!=0){
num=n%2;
n/=2;
a[i++]=num+'0'; //注意得将char和int转换
}
int len=strlen(a);
for(i=len-1;i>=0;i--)
cout<<a[i];
}
else //特值判断容易忘。。
cout<<"0";
}
十进制转换成多个不同的k进制:
特别:若用一个数组存放每组答案并输出时,由于数组在在全局定义时候已经初始化,之后没办法再进行整体初始化,调用strlen函数使用则不正确。必须手动加\0结束标志符号来收尾。
void dToK(int n, int k, char a[]){
int num=0,i=0; //num最好初始化下 防止编译器版本不同出错
if(n!=0){
while(n>0){
num=n%k;
n/=k;
a[i++]=num+'0'; //char和int转换
}
a[i]='\0'; //bug关键点 ! (但是为啥不是a[i+1]??)
int len=strlen(a);
for(i=len-1;i>=0;i--)
cout<<a[i];
cout<<"\n";
}
else
cout<<"0"<<"\n";
}
1.6日:淦 昨天上午写了没一会就躺床上颓废了一天 打脸诶wc...
引用 和 指针:
用string代替char字符串:
①读字符串出问题时用string(想起了上边那个cin后吸回车的题。。)
②cin或者getline读入字符串
③string支持int相同的运算符:=(赋值) +(连接)+=(加上自身后连接) 以及 比较大小运算
完全代替strcmp.strcat和strcopy了!
④string里常用的函数 先码住用了再查
注: string::npos是字符串可储存的最大字符数,通常是无符号int或无符号long的最大取值。
关于find 的具体用法:
string类的find()函数总结__Previous的博客-CSDN博客_string的find函数
Q:第三行的* 是嘛意思?
vector 动态数组
队列
队列套结构体
优先队列