C++:沒想到這麼爛的代碼居然是我寫的

最近翻看了很久之前自己開發的幾個項目的代碼,滿滿的菜意。哎,真的有掐死自己的想法啊。寫的真的太爛了,這裡發出來給大家借鑑一下。

C++:沒想到這麼爛的代碼居然是我寫的

編程小菜鳥

未做足夠的異常檢查

vector Method::get_f_steptool_Point(string content,bool isArc)
{
\tvector split_vec =split(content,",") ;
\tvector Point ;
\tPoint.push_back(atof(split_vec[1].c_str()));
\tPoint.push_back(atof(split_vec[2].c_str()));
\tPoint.push_back(atof(split_vec[3].c_str()));
\tif(isArc)
\t{
\t\tPoint.push_back(atof(split_vec[4].c_str()));
\t\tPoint.push_back(atof(split_vec[5].substr(0,split_vec[5].find(")")) .c_str()));
\t}
\telse Point.push_back(atof(split_vec[4].substr(0,split_vec[4].find(")")) .c_str()));
\treturn Point ;
}

從上段代碼可以看到,通篇沒有做任何異常檢查。這段代碼主要存在這麼兩個問題:

1、split方法是我自己寫的,有可能拋出異常,導致返回的split_vec的結果可能並不是自己意料中的。然而,代碼既然沒有對split_vec做判斷直接拿過來就開始取下標,而且統統未做越界檢查。

2、atof(split_vec[5].substr(0,split_vec[5].find(")"))這一行,存在兩個可能的異常未做檢查,第一個就是split_vec[5]未做越界檢查,這裡推薦用at()方法訪問vector元素,因為at是可以拋出異常的。第二個,就是未檢查find(")")是否有找到“)”。

理解不夠透徹

vector Method::split(string contentOfRegionScr, string parameter)
{
\tint index=1;
\tstring spiltedStr;
\tvector splitString;
\twhile(index>0)
\t{
\t\tindex=contentOfRegionScr.find(parameter);
\t\tif(index>0)
\t\t{
\t\t\tspiltedStr=contentOfRegionScr.substr(0,index);
\t\t\tcontentOfRegionScr=contentOfRegionScr.erase(0,index+parameter.length());
\t\t\tsplitString.push_back(spiltedStr);
\t\t}
\t\telse
\t\t{
\t\t\tsplitString.push_back(contentOfRegionScr);
\t\t}
\t}
\treturn splitString;
}

上面這段就是實現字符串分割的方法,哎!真不知道當時自己怎麼想的。雖然功能能實現(有點小bug),在循環中反覆的判斷(index>0),不僅代碼冗長而且效率也低。這就是對代碼運行流程和函數使用方法等理解不夠透徹造成的。

正解:

vector split_(string contentOfRegionScr, string parameter)
{
\tvector splitString;

\tsize_t index = contentOfRegionScr.find(parameter);
\twhile (index != string::npos)
\t{\t
splitString.push_back(contentOfRegionScr.substr(0,index));
\t\t contentOfRegionScr = contentOfRegionScr.substr(index+parameter.length(),contentOfRegionScr.length());
\t\t index = contentOfRegionScr.find(parameter);
\t}
\tif(contentOfRegionScr!="")splitString.push_back(contentOfRegionScr);
\treturn splitString;
}


分享到:


相關文章: