C++ 显示重复项的字符串向量C++;

C++ 显示重复项的字符串向量C++;,c++,string,vector,sqlite,push-back,C++,String,Vector,Sqlite,Push Back,不工作代码: #include "stdafx.h" #include <stdio.h> #include "sqlite3.h" #include <Windows.h> #include <string> #include <iostream> #include <vector> using namespace std; std::vector<string> emailsfound; static int cal

不工作代码:

#include "stdafx.h"
#include <stdio.h>
#include "sqlite3.h"
#include <Windows.h>
#include <string>
#include <iostream>
#include <vector>

using namespace std;
std::vector<string> emailsfound;

static int callback(void *data, int argc, char **argv, char **azColName)
{
    int i;
    string thefile;
    for(i=0; i<argc; i++)
    {
        thefile = string(argv[i]);
        size_t found = thefile.find(":");
        if(found != std::string::npos)
        {
            thefile.erase(thefile.begin(), thefile.begin()+1);
            emailsfound.push_back(thefile);

            //here's the problem
            cout << emailsfound[i] << endl; //here it only couts emailsfound[0] over and over until the loop's work is done.
        }
        else
        {
        }
   }
   return 0;
}


int main(int argc, char* argv[])
{
    sqlite3 *db;
    char *zErrMsg = 0;
    int rc;
    char *sql;
    const char* data = "Callback function called"; //I am not printing this

    /* Open database */
    rc = sqlite3_open("C:\\Users\\main.db", &db);
    if( rc )
    {
        return 0;
    }
    else
    {
    }

    /* Create SQL statement */
    sql = "SELECT emails from People";

    /* Execute SQL statement */
    rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
    if( rc != SQLITE_OK )
    {
        sqlite3_free(zErrMsg);
        return 0;
    }
    else
    {
    }
    sqlite3_close(db);
    system("PAUSE");
    return 0;
}
#包括“stdafx.h”
#包括
#包括“sqlite3.h”
#包括
#包括
#包括
#包括
使用名称空间std;
std::vector emailsfound;
静态int回调(void*data,int argc,char**argv,char**azColName)
{
int i;
把文件串起来;

对于(i=0;i
thefile.erase(thefile.begin(),thefile.begin()+1);
这可能会有问题……您已经调试过了吗?如果能看到一些示例输入,也会很高兴。
emailsfound
在哪里/如何声明?thefile.erase(thefile.begin(),thefile.begin()+1)很好。阿斯切普勒,我已经有了。我刚刚发布了整个源代码,也许这会让事情看起来更好。好吧,我找到了它为什么不打印…因为我要求向量在回调函数中打印出来。出于某种原因,这正在发生。
#include "stdafx.h"
#include <stdio.h>
#include "sqlite3.h"
#include <Windows.h>
#include <string>
#include <iostream>
#include <vector>

using namespace std;
std::vector<string> emailsfound;

static int callback(void *data, int argc, char **argv, char **azColName)
{
    int i;
    string thefile;
    for(i=0; i<argc; i++)
    {
        thefile = string(argv[i]);
        size_t found = thefile.find(":");
        if(found != std::string::npos)
        {
            thefile.erase(thefile.begin(), thefile.begin()+1);
            emailsfound.push_back(thefile);

            //Doing this makes it works great.
            printthevector();
        }
        else
        {
        }
   }
   return 0;
}

void printthevector()
{
    int sizeofthevector;
    int i = 0;
    sizeofthevector = emailsfound.size();
    while (i < sizeofthevector)
    {
    cout << emailsfound[i].c_str() << endl; //print everything / it works great
    }
}

int main(int argc, char* argv[])
{
    sqlite3 *db;
    char *zErrMsg = 0;
    int rc;
    char *sql;
    const char* data = "Callback function called"; //I am not printing this

    /* Open database */
    rc = sqlite3_open("C:\\Users\\main.db", &db);
    if( rc )
    {
        return 0;
    }
    else
    {
    }

    /* Create SQL statement */
    sql = "SELECT emails from People";

    /* Execute SQL statement */
    rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
    if( rc != SQLITE_OK )
    {
        sqlite3_free(zErrMsg);
        return 0;
    }
    else
    {
    }
    sqlite3_close(db);
    system("PAUSE");
    return 0;
}