[英]c_str() method not recognised on my string
#include <iostream>
#include <cstring>
#include <string>
void parcala(string zaman_string)
{
string tutucu;
for(int i=0;i<zaman_string.length();i++)
{
if(zaman_string[i]!=':')
{
strcat(tutucu,zaman_string[i].c_str());
}
else
{
cout<<tutucu<<endl;
tutucu="";
}
}
}
編譯上述 function 時出現此錯誤:
Error= [Error] request for member 'c_str' in zaman_string. std::basic_string<_CharT,
_Traits, _Alloc>::operator[]<char, std::char_traits<char>, std::allocator<char>>
(((std::basic_string<char>::size_type)i))', which is of non-class type 'char'
為什么strcat
被拒絕? strcat 有其他選擇嗎?
您正在混合 C++ 中的不同方式來處理字符串。
strcat
和其他str...
function 在char*
上工作,即char
的 arrays 。.c_str()
, .length()
是std::string
class 的成員函數。 你應該選擇一套工具並堅持下去。 我強烈建議使用std::string
。 通過一些改進以更好地反映這個千年的慣用 C++ 1 :
#include <string>
#include <iostream>
void parcala(std::string const& zaman_string) // [1]
{
std::string result; // [2]
for (auto c : zaman_string) { // [3]
if (c == ':') {
std::cout << result << '\n'; // [4]
result.clear();
} else {
result += c;
}
}
}
const&
: 對常量的引用(或者通常是“const ref”)using namespace std
被認為是有害的\n
而不是使用std::endl
1)另一個改進是定義一個通用拆分 function(獲取一個字符串並返回一個 string_views 數組)並在分隔符“:”上使用該拆分 function。
您可以使用此代碼
void fun(const std::string& param) {
for (int i = 0 ; i < param.length() ; ++i) {
if(param[i] != ':')
std::cout << param[i];
else
std::cout << "\n";
}
}
看起來你可能會更好地使用稍微不同的方法:
replace(begin(zaman_string), end(zaman_string), ':', '\n');
std::cout << saman_string << std::endl;
std::replace
來自<algorithm>
。 這個header有很多功能可以代替手動循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.