C风格的字符串
字符数组,以‘\0’结尾
char str[1000]
输入 scanf(“%s”,str);
输出 printf(“%s\n”,str);
C++风格的字符串
string #include<string>
using namespace std;
初始化 string str1 = str; // “hello”
连接 str1 + “world” → “hello world”
字符 str1[0] → ‘h’
长度 str1.length()
判断相等 str1 == “hello”
比较字典序 str1 > “abandon”
从c++ → c str1.c_str()
C++风格
map 实现下标是字符串内容是Int
映射
#include <map>
using namespace std;
“Caixunkun” → “ikun”
“wuyifan” → “Meigeni”
map的基本使用
#include <map>
#include <cstdio>
#include <string>
using namespace std;
int main() {
// 键 key --> 值 value
// <键的类型,值的类型>
map<string,string> myMap = {
{"Caixukun","ikun"},
{"wuyifan","meigeni"}
};
// 读取字符串用C风格的
char str[100];
scanf("%s",str);
// 转换成C++风格的
string name = str;
// 输出C++风格 --> C风格
// myMap[key] 根据key映射到对应的值(C++风格的字符串)
printf("%s的粉丝被称为%s\n",name.c_str(),myMap[name].c_str());
return 0;
}
根据年月日算星期几
图片来源于王道机试课程
代码
#include <cstdio>
#include <map>
#include <string>
using namespace std;// 一般来说,都加上这句话
int main() {
int mday[13] = {-1,31,28,31,30,31,30,31,31,30,31,30,31};
string intToWeekday[7] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
map<string,int> monthToint = {
//复制代码时小心中英文标点
{"January",1},{"February",2},{"March",3},{"April",4},{"Map",5},
{"June",6},{"July",7},{"August",8},{"September",9},{"October",10},
{"November",11},{"December",12}
};
int year,mon,day;
char str[100];
string month;
//9 October 2001
//scanf 要使用C风格
bool isBefore;//为真来自之前,为假来自之后
while (scanf("%d%s%d",&day,str,&year) != EOF){
month = str;//把字符串从C风格转换成C++风格
mon = monthToint[month];//从字符串到整数
if(year < 2023
|| 2023 == year && mon < 2
|| 2023 == year && mon < 2 && day < 8){
isBefore = true;
} else{
isBefore = false;
}
//从begin走到End
int begYear, begMon, begDay, endYear, endMon, endDay;
if (isBefore){
begYear = year; begMon = mon; begDay = day;
endYear = 2023; endMon = 2; endDay = 8;
} else{
begYear = 2023; begMon = 2; begDay = 8;
endYear = year; endMon = mon; endDay = day;
}
//计算总天数
int totalDay = 0;
while(true){
if (begYear == endYear && begMon == endMon && begDay == endDay){
break;
}
++totalDay;
//nextDay
bool isleap = begYear%400==0 || begYear%100!=0 && begYear%4==0;
if (isleap){
mday[2] = 29;
} else{
mday[2] = 28;
}
++begDay;
if (begDay > mday[begMon]){
begDay = 1;
++begMon;
if (begMon > 12){
begMon = 1;
++begYear;
}
}
}
if (isBefore){
// (x+totalDay)%7 = 3 --> x = (10 - totalDay%7)%7
printf("%s\n",intToWeekday[(10 - totalDay%7)%7].c_str());
} else{
printf("%s\n",intToWeekday[(totalDay+3)%7].c_str());
}
// if(month == "January"){
// mon = 1;
// //printf也要使用C风格的字符串
// printf("mon = %d, month = %s\n", mon, month.c_str());
// } else if(month == "February"){
// mon = 2;
// //printf也要使用C风格的字符串
// printf("mon = %d, month = %s\n", mon, month.c_str());
// }
}
return 0;
}