東華OJ 二維陣列EZ 旋轉句子 求各行均值(有坑)
阿新 • • 發佈:2020-12-14
主要內容C++對於空行的讀入
1.旋轉句子
-
C的fgets()函式自然可以讀。C++可以用更簡便的getline(cin,string)這裡string只是說讀入的只能為string,實際用時是變數名.讀入時,若為按下enter(windows下==’\r’+’\n’),則(系統自動為字串新增’\0’,所以若為空行則s[0]==’\0’)getlin正常輸入時最後會返回bool型別,所以可寫在while條件內。預設以EOF結束輸入–windows下ctrl+z,debug時按下ctrl+z即進行後續步驟
-
第二種方式用cin.get一個一個地讀到字元陣列內。但是get似乎是無法停止的。
-
題意分析:
1.問題其實就是改變座標系。二維陣列正好可以看出一個二維空間。讀入時是按照先同y然後依次讀入x的。輸出時就是先固定x,按照y的順序輸出。
2.STL的vector在輸入時push_back函式是每次把插入的元素放在最後的。也就是說最後一個輸入的值的下標永遠是0.遍歷時別出錯。
AC程式碼
#include <bits/stdc++.h>
using namespace std;
int main()
{
//本質更換座標系(x,y)->(y,x)
//注意沒有的字元且長度不足用空格填充
vector<string> str0;
int n=0;//個數
int len=0;//最長字串的長度,初始設定個不可能的數
string temp;
while(getline(cin,temp))//getline只能讀入字串
{
str0.push_back(temp);
if(temp.length()>len){
len=temp.length();
}
n++;
}
//問題:空行後後面的都不輸出了
for(int i=0;i<len;i++){//len不含'\0'
for(int j = n-1;j>=0;j--){
if(str0[j][0]=='\n'){
cout<<" ";
}
else{
if(i<str0[j].length()){//非空
cout<<str0[j][i];
}
else cout<<" ";
}
}
cout<<endl;
}
return 0;
}
2.求各行均值
沒什麼難的,值得注意的就是這題的PE。這題最後是不需要換行的,每個數後面都跟一個空格。