c++ - 为什么指针用于 std::string.find?

标签 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++; 
        }
    }
}

最佳答案

name 是一个包含 100 个字符串的数组。如果像现在这样单独使用数组名称,它会退化为指向其第一个元素的指针。您的代码:

n = name->find(NAME);

相当于:

n = (&name[0])->find(NAME);

因此您可以看到该值是一​​个指针,需要使用 -> 而不是 . 对其进行操作。如果有帮助,a->b 等同于 (*a).b

不过我认为您的代码有问题;您真的确定这就是您希望它的工作方式吗?

关于c++ - 为什么指针用于 std::string.find?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18291079/

相关文章:

c++ - 如何在 std::function 上创建一个钩子(Hook)?

c++ - 从头文件访问数组会使程序崩溃

c++ - 在 C++ 中将一个字符从 vector 插入到字符串

c# - DLL 中的 CreateWindowEx() 创建一个标题为奇数的窗口

c++ - "#if Foo - 0 == 0"和 "#if defined(Foo) && Foo == 0"有什么区别?

c++ - std::list 的循环迭代

C++, bool 数组未正确初始化

php - SQL Select where IN (array) 仅当找到数组中的第一项时才返回

c# - 如何在 C# 中将数组添加到 SQL 行?

java - 文本未保存到字符串变量