簡體   English   中英

我的字符串上無法識別 c_str() 方法

[英]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;
        }
    }
}

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM