先週私は関数を書くために宿題を得ました。この関数はstring
とchar
という値を得て、その最初の出現の前後に2つの部分で文字列を分割する必要があります既存のchar。文字列宣言/参照パラメータの難しさ(C++)
コードはうまくいきましたが、私の先生は私に教えてくれました。コードがよく書かれていないからです。しかし、私はそれをより良くする方法を理解していません。私は白い空白で2つの文字列を定義するのは良くないと理解していますが、そうでなければ範囲外になります。文字列入力が変わるので、文字列サイズは毎回変わります。
#include <iostream>
#include <string>
using namespace std;
void divide(char search, string text, string& first_part, string& sec_part)
{
bool firstc = true;
int counter = 0;
for (int i = 0; i < text.size(); i++) {
if (text.at(i) != search && firstc) {
first_part.at(i) = text.at(i);
}
else if (text.at(i) == search&& firstc == true) {
firstc = false;
sec_part.at(counter) = text.at(i);
}
else {
sec_part.at(counter) = text.at(i);
counter++;
}
}
}
int main() {
string text;
string part1=" ";
string part2=" ";
char search_char;
cout << "Please enter text? ";
getline(cin, text);
cout << "Please enter a char: ? ";
cin >> search_char;
divide(search_char,text,aprt1,part2);
cout << "First string: " << part1 <<endl;
cout << "Second string: " << part2 << endl;
system("PAUSE");
return 0;
}
ロジックを簡略化し、 'push_back' /' append'/'+ ='を使用してください。 'firstc'と' counter'は必要ありません。よく書かれたコードが必要な場合は、 'text'を' const& 'で渡しても一致します(' firstc'/'firstc == true'、' &&'の前に空白がありません)。それは小さなものです。 – LogicStuff