你好,我在这个项目上遇到了一些麻烦。假设从文本文件中获取一个句子,然后将其添加到char * array []。我在switch语句中遇到声明部分时遇到问题。当一个单词长度为3个字符时,它会用最后一个适合的元素替换数组中的所有元素。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int length(const char *a){
int counter=0;
while(a[counter]!= NULL){
counter++;
}
return counter;
}
int main() {
ifstream file;
file.open("C:\\Users\\casha\\Desktop\\group_project1\\message.txt");
string line;
while(!file.eof()){
getline(file,line);
}
const char* message = line.c_str();
const char *words[9];
words[0]= line.substr(0,4).c_str();
int pos = 0;
int counter = 0;
int wordscounter=0;
while(pos<=length(message)){
if(message[pos]== ' ' || message[pos]== NULL){
switch(counter){
case 3 :
words[wordscounter] = line.substr(pos- counter,counter).c_str();
wordscounter++;
break;
case 4 :
words[wordscounter] = line.substr(pos-counter,counter).c_str();
wordscounter++;
break;
case 5 :
words[wordscounter] = line.substr(pos-counter,counter).c_str();
wordscounter++;
break;
}
counter=0;
pos++;
}
else{
pos++;
counter++;
}
}
for(int x=0;x<=8;x++){
cout << words[x] << endl;
}
应该像这样输出
The
quick
brown
fox
jumps
over
the
lazy
dog
但相反产生:
dog
jumps
jumps
dog
jumps
lazy
dog
lazy
dog
我读了一些关于未分配内存的内容,我是c ++的新手,所以任何帮助都会受到赞赏 提前致谢 ! &LT; 3
编辑 -
如果我像这样手动将值分配给数组
words[3] = line.substr(3,5).c_str();
然后它将打印正确的输出。 那么我使用这个方法和我的switch语句之间有什么区别,它的分配是什么???
答案 0 :(得分:0)
在你写的评论中写道:
那么我如何在不留下悬挂在语句之外的字符串的情况下分配给
char*
数组。
更改
const char *words[9];
到
std::vector<std::string>> words;
而不是使用
words[0] = line.substr(0,4).c_str();;
使用
words.push_back(line.substr(0,4));
在您正在使用的其他地方进行类似的更改
words[wordscounter] = line.substr(pos-counter,counter).c_str();
他们可以是:
words.push_back(line.substr(pos-counter,counter));