[英]C++ Call string into function?
不知道如何准確解釋這一點,抱歉。 我正在創建一個函數來查找由給定字符串構建的數組中的第一個字符實例。 我有從字符串創建數組並遍歷數組的函數,但不確定如何將數組放入 find 函數中。
測試儀是這樣構建的
stringName("Test test test");
stringName.find("e",0); //where 0 is the starting position, so it would return 1.
int SuperString::find(char c, int start) {
// put array grabber thing here
size = *(&data + 1) - data;
for(int i = start; i < size ; i++){
if(data[i] == c){
return i;
}
}
return -1;
}
這就是我必須將字符串變成數組的原因。
SuperString::SuperString(std::string str) {
size = str.size();
data = new char[size];
for (int i = 0; i < size; i++) {
data[i] = str.at(i);
}
}
這可能是我缺少的一些簡單的東西,但任何幫助表示贊賞。
您正在傳遞一個字符串文字,特別是一個const char[2]
,其中需要一個char
。 使用'e'
而不是"e"
:
stringName.find('e', 0);
更重要的是, size = *(&data + 1) - data;
僅當data
是(引用 a)固定數組時才有效(請參閱*(&arr + 1) - arr 如何給出數組 arr 元素的長度? )。 當data
是指向數組的指針時,它將不起作用,就像您的情況一樣,因為您使用new char[]
分配數組。 您將不得不單獨跟蹤數組的size
,這似乎是在做,但實際上並沒有使用在SuperString
構造函數中獲得的size
。 只需去掉find()
中試圖重新計算size
,使用您已有的值:
int SuperString::find(char c, int start) {
// size = *(&data + 1) - data; // <-- GET RID OF THIS
for(int i = start; i < size; ++i){
if (data[i] == c){
return i;
}
}
return -1;
}
話雖如此,如果您只是將其data
成員設為std::string
而不是char*
,則可以大大簡化您的SuperString
類,例如:
#include <string>
class SuperString {
private:
std::string data;
...
public:
SuperString(const std::string &str);
int find(char c, int start = 0);
...
};
SuperString::SuperString(const std::string &str) : data(str) {
}
int SuperString::find(char c, int start) {
return (int) data.find(c, start);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.