快速C++I/O将字符串(字符数组)读取到向量中,并解决错误
Fast C++ I/O to read a string (char array) into a vector, plus resolving error
现在我正试图使用一个charpointers向量来保存一堆单独的字符串
vector<char*> strings(10);
单个字符串的形式为char indString[100]
我这样做是为了分配每个
for (int i=0; i < iLimit; ++i){
gets(indString);
strings[i] = indString;
}
但当我输出所有时
for (auto & stri: strings) cout << stri << endl;
我只是读了一堆重复的最后一个字符串。
您只是将指针存储到用于读取。。。所有指针都指向同一个缓冲区,这就是为什么您看到最后一个字符串重复出现的原因。
只需使用std::vector<std::string>
即可。
您在每次迭代时都会向vector
添加相同的指针,这会导致您在输出中看到重复的指针。您可以使用std::getline
、std::string
和std::move
高效地和干净地执行此操作。
下面是一个从cin
读取字符串并输出矢量内容的工作示例。
#include <vector>
#include <string>
void readtext(
std::istream& input,
std::vector<std::string>& text,
const size_t limit)
{
std::string line;
for (size_t count = 0; count < limit && std::getline(input, line); ++count)
text.push_back(std::move(line));
}
int main()
{
std::vector<std::string> text;
readtext(std::cin, text, 3);
for (auto& line : text)
std::cout << line << std::endl;
}
您正在将所有strings[i]
指向同一位置。。。您需要为每个字符串分配不同的内存位置,并将它们读取到该位置。对于char数组,它看起来是这样的:
char* strings[10];
for (int i=0; i < iLimit; ++i){
strings[i] = malloc(sizeOfLargestString + 1);
gets(strings[i]);
}
或完整代码(已测试):
#include <stdio.h>
#include <stdlib.h>
#define sizeOfLargestString 100
#define N 3
int main(void) {
int ii;
char* strings[N];
for (ii=0; ii < N; ii++) {
strings[ii] = (char*)malloc(sizeOfLargestString + 1);
gets(strings[ii]);
}
for(ii=0 ;ii< N; ii++) {
printf("%sn", strings[ii]);
}
return 0;
}
它们都指向同一个指针。我建议这样做:
char** PointerArray = new char*[NumOfStrings];
//input strings
for( int i = 0; i < NumOfStrings; i++ )
cout << PointerArray[i];
for( int i = 0; i < NumOfStrings; i++ )
delete[] PointerArray[i];
编辑:如果你需要矢量,制作一个字符数组,然后把每个字符传给它。
或者你可以试试这个:
char** PointerArray = new char*[NumOfStrings];
vector<char*> pointerArray(NumOfStrings);
for( int i = 0; i < NumOfStrings; i++ )
pointerArray[i] = PointerArray[i];
//stuff
for( int i = 0; i < NumOfStrings; i++ )
delete[] pointerArray[i];
相关文章:
- C++:如何读取分离变量,然后读取向量
- C++读取行到类向量
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 从流到邻接列表的向量读取图形
- 尝试将字符串从文件读取到无符号字符向量中
- 如何在 c++ 中从字符串向量中读取
- 将结构向量保存到文件中,并从C++文件中读取结构向量
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 从.txt文件读取到C++中的双精度向量
- 用rapidjson读取子对象向量
- 对唯一 ptr 无效读取的引用向量
- 如何从输入文件中读取字符并将其存储到向量中?
- 如何使用 cin 将整数从控制台读取到向量中
- 通过将文本文件读取为字符串/向量来计算加权/未加权 GPA
- 以C++为单位将已知数量的整数输入正确读取到向量中
- C 从文件到向量读取
- 使用向量读取输入文件
- 在 TheADS 中的向量读取之间插入元素
- 从向量读取并分配给对象的成员
- 从保留的向量读取比从非保留向量读取更快