提问者:小点点

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


这是一个基本问题,但我对C++还是个新手,所以先向您道歉:)

我似乎无法打印出存储在向量中的字符串。我使用了std::cout和printf,但printf似乎会给出错误“the program has stopped working”。我哪里出错了?

以下是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个答案

匿名用户

您不应该使用读取,因为modified接受。您也不应该使用来打印对象。

是C函数。C语言中没有类型,因此,它们使用纯字符数组进行操作。

您应该使用:

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

匿名用户

您不能立即使用读取整数。

这应该会起作用:

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;
}

匿名用户

关于代码,您需要更改两件事。首先,scanf()不支持任何C++类。你可以在这个链接上读到更多关于它的信息。其次,要替换scanf(),可以使用getLineCin,temp。为了使用它,您应该添加一行cin.ignore();在进行getline调用之前,因为您输入了一个数字并按enter键,所以会在cin缓冲区中插入一个'n'字符,下次调用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;
   }

请看这里代码的工作演示。

我希望我能解释清楚。