My Code example:
char* array = new char[10];
char* str;
int j = 0;
MyClass(char* input){ //input = sentence columns terminated by '\n'
str = new char[strlen(input)];
for(int i=0; i<strlen(input); i++){
if (input[i] == '\n'){ //look for end of line
str[i] = '\0'; //add \0 Terminator for char[]
array[j] = &(str[i]); //store address of sentence beginning in array
j++;
}
else{
str[i] = input[i];
}
}
}
如何将地址存储到数组中。所以我可以用数字得到句子的起始地址。我创建了一个带有向量的解决方案,将我的句子存储为char *对象。但是必须有一种没有载体的方法吗?!
编辑:
这是我的解决方案。
#include <iostream>
using namespace std;
class Pointer{
public:
char** array = new char*[10];
char* str;
char* buffer;
int j = 1;
Pointer(char* input){
str = new char[strlen(input)];
array[0] = str;
for (int i = 0; i < strlen(input); i++){
if (input[i] == '\n'){
str[i] = '\0';
array[j] = &(str[i]) + sizeof(char);
j++;
}
else{
str[i] = input[i];
}
}
}
void output(int i){
buffer = array[i];
cout<<buffer;
}
};
感谢您的帮助! :)
答案 0 :(得分:1)
回答实际问题:
char ** array = new (char *)[10];
你应该做的事情是:
std::vector<std::string> array;
答案 1 :(得分:1)
最好的方法是使用std容器(std::vector<std::string>
)。无论如何,如果你确实需要C方式:
在这一行:
array[j] = &(str[i]);
您正在存储字符串的 ith 字符的地址。如果要将指针存储到整个字符串,请使用:
array[j] = str;
请注意,您的代码中还有许多其他错误。 例如,您不应该使用常量大小的数组,因为如果文本中有更多行,您将面临未定义的行为风险。
顺便说一下。 MyClass
是一个函数,而不是一个类。
答案 2 :(得分:0)
char* array[10]
char* str;
int j = 0;
MyClass(char* input){ //input = sentence columns terminated by '\n'
str = new char[strlen(input)];
for(int i=0; i<strlen(input); i++){
if (input[i] == '\n'){ //look for end of line
str[i] = '\0'; //add \0 Terminator for char[]
array[j] = str; //store address of sentence beginning in array
// or you can use
// array[j] = &(str[0]);
j++;
}
else{
str[i] = input[i];
}
}
}
希望它有所帮助!
答案 3 :(得分:0)
class Pointer{
public:
Pointer(std::string input){
addresses = split(input, '\n', addresses);
}
void output(int i){
std::cout << addresses.at(i);
}
private:
std::vector<std::string> addresses;
};