【发布时间】:2021-03-05 00:28:09
【问题描述】:
我最近开始学习 C++,目前正在尝试构建一个我最近在 python 中构建的工具。我的问题是我不知道如何使单词列表的长度成为全局的,例如:
#include <iostream>
#include <fstream>
#include <string>
int main(int argc, char* argv[]) {
....
fstream file;
file.open(argv[i], ios::in);
if (file.is_open()) {
string tp;
while (getline(file, tp)) {
// cout << tp << "\n" << endl;
string words[] = {tp};
int word_count = sizeof(words) / sizeof(words[0]);
for (int e = 0; e < word_count; e++) {
cout << word_count[e];
}
}
file.close();
} else {
cout << "E: File / Directory " << argv[i] << " Does not exist";
return 0;
}
....
}
在上面写着int word_count = sizeof(words) / sizeof(words[0]); 和tring words[] = {tp}; 的地方,我希望能够在全局范围内使用它,以便以后可以使用数组的长度和数组本身,以便循环遍历它并使用他们在另一个声明中。
谁能告诉我该怎么做? 顺便说一句,我只做了大约 4 天的 C++,所以如果我不明白你告诉我的内容,请不要生气。
【问题讨论】:
-
您使用数组而不是 C++ vector 字符串是否有原因?它们会为您调整大小,因此您不必指定数组的大小。
-
谢谢,刚刚想通了,但我也希望能够在稍后使用 for 循环通过向量从内部获取每个项目,但这都是在另一个语句中继续,所以我需要以某种方式返回向量。关于我如何做到这一点的任何想法? :? |
-
你可以声明一个向量
std::vector<std::string> v;,用v.push_back(some_string)添加它,然后像数组一样在你的for循环中索引它:v[index]。 This page 应该有你需要的所有例子。 -
数组是二等公民。他们仍然遵循 1970 年代的所有旧 C 规则。它们不生长。它们很难复制,而且它们通常不如遵循现代习语的库容器,就像你习惯从 Python 中引入的那样。
string words[] = {tp};是一个字符串数组。永远永远。因为它是在循环内限定的,所以在循环的每次迭代中都会创建一个新的。对你基本没用。如上所述,您需要一个vector,并且应该在包含您希望使用它的所有位置的最窄范围内定义它。 -
旁注:如果您的编译器相对较新,您可以将
int word_count = sizeof(words) / sizeof(words[0]);替换为int word_count = std::size(words);
标签: c++ loops while-loop scope