将字符串转换为整数向量

时间:2017-05-21 03:22:24

标签: c++ stdvector

FizzBu​​zz计划。用户输入以逗号分隔的数字。程序读取输入并让计算机知道是否可以被3,5或两者整除。当用户输入15,5,30时,程序将只输出第一个数字15,然后停在那里。我究竟做错了什么?

void processVector(vector<int> intVector)
{
    bool loop;
    for (int i = 0; i < intVector.size(); i++)
    {
        loop = true;
    }
}

int main()
{

    cout << "Welcome to the FizzBuzz program!" << endl;

    cout << "This program will check if the number you enter is divisable by 
          3, 5, or both." << endl;


    cout << "Please enter an array of numbers separated by a comma like so, 
          5,10,15" << endl;
    cin >> userArray;

    vector<int> loadVector(string inputString);
    istringstream iss(userArray);
    vector <int> v;

    int i;

    while (iss >> i);
    {
        v.push_back(i);
        if (iss.peek() == ',')
            iss.ignore();


        if (i % 15 == 0)
        {
            cout << "Number " << i << " - FizzBuzz!" << endl;

        }
        else if (i % 3 == 0)
        {
            cout << "Number " << i << " Fizz!" << endl;

        }

        else if (i % 5 == 0)
        {
            cout << "Number " << i << " Buzz!" << endl;

        }

        else
        {
            cout << "Number entered is not divisable by 3 or 5." << endl;       
        }
    }

    system("pause");

}

2 个答案:

答案 0 :(得分:0)

以下是我将如何解决问题:

#include <iostream>
#include <string>
#include <vector>

int main() {
    std::cout << "!!!Hello World!!!" << std::endl; // prints !!!Hello World!!!
    std::cout << "Please enter your numbers seperated by a comma (5, 3, 5, 98, 278, 42): ";

    std::string userString;
    std::getline(std::cin, userString);
    std::vector<int> numberV;

    size_t j = 0; // beginning of number
    for(size_t i = 0; i < userString.size(); i++){
        if((userString[i] == ',') || (i == userString.size() -1)){ // could also use strncmp
            numberV.push_back(std::stoi(userString.substr(j, i))); // stoi stands for string to int, and .substr(start, end) creates a new string at the start location and ending at the end location
            j = i + 1;

        }
    }

    for(size_t n = 0; n < numberV.size(); n++){
        std::cout << numberV[n] << std::endl;
    }

    return(0);

}

这应该为您提供一种解决问题的方法(无需处理程序中的fizzbuzz部分),我个人认为这种方法更简单。

使用功能的基本形式是:

<return type> <function_name(<inputs)>{
    stuff
};

所以,一个带字符串并返回一个向量(你想要的)的基本函数是:

std::vector myStringToVector(std::string inputString){
    std::vector V;
    // your code (see the prior example for one method of doing this)
    return(V);
};

看起来他们想要一个单独的函数来输出你的矢量值,这看起来像是:

void myVectorPrint(std::vector inputVector){
    // your code (see prior example for a method of printing out a vector)
};

答案 1 :(得分:0)

感谢@Aaron的帮助。这是完成的代码,它很棒! 我不得不花更多的时间研究一些事情,并试图了解哪些顺序以及在功能和如何调用它们方面放置的内容。我很感激所有的帮助,因为我说我是一个菜鸟。

#include "stdafx.h"
#include <iostream>
#include<sstream>
#include<string>
#include<vector>

using namespace std;


vector<int> loadVector(string inputString)
{
stringstream ss(inputString);
vector <int> numberV;

int n;

size_t j = 0; // beginning of number
for (size_t n = 0; n < inputString.size(); n++) 
{
    if ((inputString[n] == ',') || (n == inputString.size() - 1)) 
    { 
        numberV.push_back(std::stoi(inputString.substr(j, n))); 
        j = n + 1;

    }

}


return numberV;
}
void processVector(vector<int> intVector)
{
for (int i = 0; i < intVector.size(); i++)
{
    int n = intVector.at(i);
    if (n % 15 == 0)
    {
        cout << "Number " << n << " - FizzBuzz!" << endl;
    }
    else if (n % 3 == 0)
    {
        cout << "Number " << n << " Fizz!" << endl;
    }

    else if (n % 5 == 0)
    {
        cout << "Number " << n << " Buzz!" << endl;
    }

    else
    {
        cout << "Number entered is not divisable by 3 or 5." << endl;
    }
}
}

int main()
{
cout << "Welcome to the FizzBuzz program." << endl
    << "Please enter an array of numbers separated by comma's (5, 10, 15)" 
    << endl;

string inputString;
getline(cin, inputString); 

try
{
    vector<int> intVector = loadVector(inputString);
    processVector(intVector);
}
catch (const exception& e)
{
    cout << "Exception caught: '" << e.what() << "'!;" << endl;
}
system("pause");
return 0;
}