目的: 轉成大寫

輸入 :
a
bBb
CccC
輸出 :
A
BBB
CCCC

先不管輸出, 不知為何第 2 層 for() 編譯過不了
錯誤訊息是 : 二元運算子 '[' : 找不到使用右方運算元型別 'std::_Vector_iterator<_Myvec>' 的運算子 (或是沒有可接受的轉換)

抱歉. 因為縮排都會跑掉, 小弟只好上傳圖片了
請問 C++
文章關鍵字
我的C++編程早就忘得七七八八了﹐所以抱歉無法提供任何具體的改正建議,但在遞歸程式用for語句總覺得有點不對
srwe wrote:
我的C++編程早就忘(恕刪)


這不是遞歸吧
模組化可以減少程式變的複雜,避免精力浪費在debug複雜的程式:
把最小單位且有意義的功能獨立成一個函式: Toupper(string)
然後 Toupper(vector<string> vString) 再去呼叫 Toupper(string)

for (size_t i = 0; i < vString.size(); ++i)
{
vString[i] = Toupper(vString[i]);
}

另外vector儘量直接以陣列的方式存取,除非必要,不必用iterator存取。
</string>


std::vector::operator[]
https://www.cplusplus.com/reference/vector/vector/operator[]/
reference operator[] (size_type n);
const_reference operator[] (size_type n) const;

vector operator [] 接受的參數是 size_type(整數?) 不是 iterator
lccw wrote:
模組化可以減少程式變(恕刪)


謝謝您的指教
覺得 34 年前的 C 很簡單, 現在的 C++ 好難
唉....年紀大學什麼都覺得難
請問為什麼 cout 那一行無法編譯成功 ?
sarray[i] 不就是一個 string 嗎 :

vector<string> ToUpper(vector<string> sarray)
{
for (vector<string>::iterator i = sarray.begin() ; i != sarray.end() ; i++) {
cout << sarray[i]; //編譯不過

}
}</string></string></string>
jimmypp wrote:
請問為什麼那個 cout 那一行無法編譯成功 ?
sarray[i] 不就是一個 string 嗎 :


cout << *i;
網路上看來的
https://blog.csdn.net/sayln_wu/article/details/7919032
其中一段:
for (vector<int>::iterator iter=ivec.begin();iter!=ivec.end();iter++)
{
i++;
cout<< *iter <<endl; *iter="(*iter)+i;" }="" 請注意iterator的物件="" iter可以做的事情,iter就具備整數陣列="" 既然你已經用vector這個template="" class,就應該放棄c語言觀念中的array的觀念,="" array要自己管理注意index,但是使用這個vector="" 產生object只需要讓iterator來做事就可以了="" <="" b=""></endl;></int>
只是等待 wrote:
就應該放棄c語言觀念中的array的觀念


謝謝, 這是我要適應的地方
但...可否告知我錯在那裡嗎? 謝謝
只是等待
for(string::iterator j= (*i).begin();j!= (*i).end();j++) *j=toupper(*j);
只是等待
#include "string.h" #include "IOSTREAM.H" #include "VECTOR.H"
把 toupper(sarray[i][j]); 改成 touppper(*j);

如果你要用陣列方式存取第一個元素,請用 array[0] = value
如果你要用iterator存取第一個元素,請用 iterator it = array.begin(); *it = value
使用 array[it] = value 是錯誤的
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!