• 2

請問 C++ string 物件的 begin() 用法

請問 C++ 裡 string 物件的 begin() 用法
查資料是說 string::begin() 會傳回一個 iterator
但為什麼第二行都不會過呢 ?

目的: 練習將輸入的字串轉成大寫並顯示出來

1. string str = "Hellow World";
2. vector<string>::iterator it = str.begin();

錯誤 : ConsoleApplication1.cpp(16): error C2440: '正在初始化' : 無法由 'std::_String_iterator<_Mystr>' 轉換為 'std::_Vector_iterator<_Myvec>'

查了好多資料都看不懂
有人可以提供一個類似的簡單例子嗎 ?
謝謝大德

34 年前學過 Turbo C</string>
2021-07-16 21:39 發佈
// ex: SkipTail(string("Abc111"), '1') == "Abc"
wstring& SkipTail(wstring& s, wchar_t c)
{
int iSkip = 0;
for (wstring:: const_reverse_iterator it = s.rbegin(); it != s.rend(); it++)
{
if (c != *it) break;
iSkip++;
}
if (0 != iSkip) s.erase(s.size() - iSkip, iSkip);
return s;
}
lccw wrote:
// ex: SkipTail...(恕刪)


哈哈..看不懂
我 34 年前學過 Turbo C
現在看這個腦子使不上力了
還是謝謝您
如果你是要存取一個字串中的字元可以看看: https://www.cplusplus.com/reference/string/string/operator[]/
哈. 好像可以了
我的目的只是要練習將輸入的字串轉成大寫並顯示出來
因為聽說 C++ 並沒有將字串轉成大寫的函數可用
只好一個字一個字的轉

int _tmain(int argc, _TCHAR* argv[])
{
string str = "Hello World";

cout << str << endl;

string::iterator it = str.begin();

for (it ; it != str.end() ; it++)
*it = toupper( *it );

cout << str << endl;

system("pause");
return 0;
}

------------------------------
結果 :
Hello World
HELLO WORLD


開心
wstring& Upper(wstring& s)
{
static const wchar_t* szConvert = L"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (size_t i = 0; i < s.size(); i++)
{
wchar_t c = s[i];
if (c >= L'a' && c <= L'z') s[i] = szConvert[c - L'a'];
}
return s;
}
lccw wrote:
wstring& Upper(wstring& s)


大哥功力深厚啊
Ghostwriter

其實google就有了,先學會google吧,初學會快很多

2021-07-17 11:01
路過看不懂
#include <algorithm>
#include <iostream>
#include <string>

int main() {
std::string str("hello world!");
std::transform(str.begin(), str.end(), str.begin(),
[](char c) { return std::toupper(c);} );
std::cout << str << std::endl;
return 0;
}

確實這是個網路上有各式寫法的題目
在C++跟C差距越來越大的今日我習慣這樣寫
</string></iostream></algorithm>
柚子味的豆花 wrote:
std::transform(


您好. 其實在網上我有看過你這樣的寫法
我好奇: C 這麼大的語言, 真的沒一個 toStrUpper ?
  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?