kit*_*why 3 c++ arrays string pointers
最初,我曾经string_array.find(item)搜索,但编译器说没有.
然后我搜索,看看我们是否可以使用string_array->find(item)指针解决问题,但没有解释.
这是我的代码:
#include<iostream>
#include<string>
using namespace std;
string name [100];
int Jan[100]={0}, Feb[100]={0}, Mar[100]={0}, Apr[100]={0}, May[100] = 0, Jun[100]={0},Jul[100]={0}, Aug[100]={0},Sep[100]={0},Oct[100]={0},Nov[100]={0},Dec[100]={0};
int earning [100];
int main () {
ifstream load;
load.open("record.txt");
if(load.fail()){
cout << "error in loading data" << endl;
exit(1);
}
else {
int i = 0;
string NAME;
int EARNING;
int MONTH;
int dump1;
char dump2;
while ( load.eof() != 1 ) {
int n = 0;
load >> NAME >> EARNING >> dump1 >> dump2 >> MONTH >> dump2 >> dump1 ;
n = name->find(NAME);
if ( n < 0 ) {
n = i ;
}
else {
i = i - 1 ;
}
name[n] = NAME;
if ( MONTH == 1) { Jan[n] += EARNING ;}
if ( MONTH == 2) { Feb[n] += EARNING ;}
if ( MONTH == 3) { Mar[n] += EARNING ;}
if ( MONTH == 5) { Apr[n] += EARNING ;}
if ( MONTH == 5) { May[n] += EARNING ;}
if ( MONTH == 6) { Jun[n] += EARNING ;}
if ( MONTH == 7) { Jul[n] += EARNING ;}
if ( MONTH == 8) { Aug[n] += EARNING ;}
if ( MONTH == 9) { Sep[n] += EARNING ;}
if ( MONTH == 10) { Oct[n] += EARNING ;}
if ( MONTH == 11) { Nov[n] += EARNING ;}
if ( MONTH == 12) { Dec[n] += EARNING ;}
i++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
name是一个包含100个字符串的数组.如果您像自己一样使用数组名称,它会衰减为指向其第一个元素的指针.你的代码:
n = name->find(NAME);
Run Code Online (Sandbox Code Playgroud)
相当于:
n = (&name[0])->find(NAME);
Run Code Online (Sandbox Code Playgroud)
所以你可以看到这个值是一个指针,需要操作->而不是..如果它有帮助,a->b相当于(*a).b.
我认为你的代码有问题; 你真的确定你想要它的工作方式吗?
这条线的事实:
n = name->find(NAME);
Run Code Online (Sandbox Code Playgroud)
是它没有做你的想法.在这里你使用的std::find方法std::string.数组的第一个元素.不是数组本身.此外,这行代码与以下内容没有什么不同:
n = (*name).find(NAME);
Run Code Online (Sandbox Code Playgroud)
因此,您的代码正在搜索NAME字符串数组的第一个元素是否存在.要搜索整个数组,我建议你使用一个std::vector.它使您可以访问标准迭代器方法:
#include <vector>
std::vector<std::string> name(100);
// ...
it = find(name.begin(), name.end(), NAME);
// std::find return an iterator
if (it == name.end())
// NOT FOUND
else
// FOUND
Run Code Online (Sandbox Code Playgroud)