C++ primer 習題第四章(2)
阿新 • • 發佈:2018-11-16
4.26 編寫程式從標準輸入裝置讀入一個string型別的字串。考慮如何程式設計實現從標準輸入裝置讀入一個C風格字串。
int main() { cout << "C++ style" << endl; string str; cin >> str; cout << str << endl; cout << "C style" << endl; char ch[10]; char *p = ch; while (p != ch + 10){ cin >> *p++; } for (int i = 0; i < sizeof(ch) / sizeof(char); ++i) cout << ch[i] << endl; }
4.28 編寫程式從標準輸入裝置讀入的元素資料建立一個int型的vector物件,然後動態建立一個與該vector物件大小一致的陣列,把vector物件的所有元素賦值給新陣列。
int main() { vector<int> vec; int a; while (cin>>a){ vec.push_back(a); } const int n = vec.size(); int *p = new int[n]; int i = 0; for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); ++iter, ++i){ p[i] = *iter; cout << p[i] << endl; } delete[] p; return 0; }
4.30 編寫程式連線兩個C風格字串字面值,把結果儲存在一個C風格字串中。然後再編寫程式連線兩個string型別字串,這兩個string型別字串與前面的C風格字串字面值有相同的內容。
int main() { const char *pc1 = "hello"; const char *pc2 = "world"; char *pc = new char[strlen(pc1) + strlen(pc2) + 1]; char *pd = pc; while (*pc1) { *pc = *pc1; ++pc; ++pc1; } while (*pc2) { *pc = *pc2; ++pc; ++pc2; } *pc = '\0'; string str="Hello"; string str2 = "World"; string str3 = str + str2; cout << str3 << endl; delete[] pd; return 0; }
4.31 編寫從標準輸入裝置讀入字串,並把該串存放在字元陣列中。描述你的程式如何處理可變長的輸入。提供比擬分配的陣列長度長的字串資料測試你的程式。
int main()
{
//固定陣列元素個數
string str;//for enter the string object
const size_t str_size = 10;
char ch[str_size + 1];
cout << "Enter the string" << endl;
cin >> str;
size_t len = str.size();
if (len > str_size){
len = str_size;
}
strncpy(ch, str.c_str(), len);
ch[len + 1] = '\0';
//不固定,動態陣列
string str2;
cin >> str2;
const size_t len_str2 = strlen(str2.c_str());
char *ch1 = new char[len_str2 + 1];
char *ch2 = ch1;
for (string::iterator iter = str2.begin(); iter != str2.end(); ++iter,++ch2){
*ch2 = *iter;
}
*ch2 = '\0';
delete [] ch1;
return 0;
}
4.32 編寫程式用int 型陣列初始化vector 物件。
int main()
{
int a[3] = { 1, 2, 3 };
vector<int> vec(a,a+3);
for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); ++iter){
cout << *iter << endl;
}
return 0;
}
4.33編寫程式把int型vector複製給int 陣列。
int main()
{
vector<int> vec = { 1, 2, 3 };
int *a=new int[vec.size()];
int *b = a;
for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); ++iter, ++b){
*b = *iter;
cout << *b << endl;
}
delete [] a;
return 0;
}
4.34 編寫程式讀入一組string型別的資料,並將它們儲存在vector中。接著,把該vector物件複製給一個字元指標陣列。為vector中的每個元素建立一個新的字元陣列,並把該vector元素的資料複製到相應的字元陣列中,最後把指向該陣列的指標插入字元指標陣列。
int main(){
string str;
vector<string> V_str;
while (cin >> str){
V_str.push_back(str);
}
char **ch = new char*[V_str.size()];
size_t i(0);
int j(0);
for (vector<string>::iterator iter = V_str.begin(); iter != V_str.end(); ++iter,++i){
char *c = new char[(*iter).size()+1];
for (j = 0; j < (*iter).size(); ++j){
c[j] = (*iter)[j];
}
c[j] = '\0';
ch[i] = c;
}
for (vector<string>::iterator iter2 = V_str.begin(); iter2 != V_str.end(); ++iter2){
cout << *iter2 << endl;
}
for (i = 0; i != V_str.size(); ++i){
cout << ch[i] << endl;
}
for (i = 0; i != V_str.size(); ++i){
delete[] ch[i];
}
cout << "Successful!" << endl;
delete[]ch;
return 0;
}
4.35 輸出習題4.34中建立的vector 物件和陣列的內容。輸出陣列後,記得釋放字元陣列。
見4.34