打印出存储在矢量中的字符串

时间:2016-04-04 14:18:19

标签: c++ string vector stl printf

这是一个基本问题,但我是C ++的新手所以提前道歉:)

我似乎无法打印出存储在矢量中的字符串。我使用了std :: cout以及printf但是printf似乎给出了错误“程序已经停止工作”。我哪里错了?

这是带有std :: cout的代码: -

   #include <iostream> 
   #include <cstdio>         
   #include <vector> 
   #include <fstream> 
   using namespace std;

    int main(){ 
     int np; 
     string temp;  

     scanf("%d", &np); 
     vector <int> money;
     vector <string> names;  

        for(int i = 0; i< np; i++){
          scanf("%s", &temp); 
          names.push_back(temp); 
          cout << names[i] << endl; 
       } 

   return 0;
   }

这根本没有返回任何字符串。

我尝试使用printf的另一个程序是完全相同的,除了cout行替换为:

printf("%s", &names[i]); 

3 个答案:

答案 0 :(得分:1)

您无法立即使用scanf()读取整数。

这应该有效:

int np;
std::string temp;

std::cout << "Enter the size: ";
std::cin >> np;
//vector <int> money;
std::vector<std::string> names;

for (int i = 0; i< np; i++) {
    std::cin >> temp;
    names.push_back(temp);
    std::cout << names[i] << endl;
}

答案 1 :(得分:0)

您不应该使用scanf来阅读std::string,因为%s已修改后会接受char*。您也不应使用printf("%s", &names[i]);打印std::string对象。

scanfprintf是C函数。 C语言中没有std::string类型,因此,它们使用普通的char数组运行。

您应使用scanfprintf代替std::cinstd::cout

std::string str;
std::cin >> str; // input str
std::cout << str; // output str

答案 2 :(得分:0)

您需要更改有关代码的两件事。 首先,,scanf()并不支持任何c ++类。您可以在此link上详细了解相关信息。 第二,要替换scanf(),您可以使用 getline(cin,temp)。要使用它,您应该在拨打getline之前添加一行 cin.ignore(); ,因为您输入了一个数字并按下输入&#39; \ n&#39;字符被插入到cin缓冲区中,将在下次调用getline时使用。

   #include <iostream> 
   #include <cstdio>         
   #include <vector> 
   #include <fstream> 
   using namespace std;

    int main(){ 
     int np; 
     string temp;  

     scanf("%d", &np); 
     vector <int> money;
     vector <string> names;  
     cin.ignore();
        for(int i = 0; i< np; i++){
          getline(cin, temp);
          names.push_back(temp); 
          cout << names[i] << endl; 
       } 

   return 0;
   }

查看代码here的工作演示。

我希望我能够正确解释它。