如果第一个元素包含任何零,则我的程序以不希望的方式运行
If the first element contains any zero, than my program is behaving in an undesired way
这有什么问题。如果第一个元素包含任何零,则除第一个元素外,一切都在工作。例如,输入 -> 100 输出 -> 10 输入>6030 输出->630。
问题:
-
输入格式
第一行也是唯一一行由逗号分隔的 n 个整数组成。
-
输出格式
解析后打印整数。
法典:
#include <sstream>
#include <vector>
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
vector<int> parseInts(string str) {
// Complete this function
stringstream ss(str);
char ch;
vector<int> v;
int s;
int i = 0;
ss >> ch;
cout << ch;
while(ss >> i){
v.push_back(i);
ss >> ch;
}
return v;
}
int main() {
string str;
cin >> str;
vector<int> integers = parseInts(str);
for(int i = 0; i < integers.size(); i++) {
cout << integers[i] << "n";
}
return 0;
}
ss >> ch; cout << ch;
问题在于您从输入流中提取 1 个字符,然后再进入循环并读取其余字符。此外,您编写代码的方式是数字仅由一位数字组成,因为您只能将 1 位数字读入char
。
如果输入是单行上以逗号分隔的整数列表,则最好使用std::getline()
读取整行并解析该行。您可以将分隔符指定为第三个参数,并使用 std::stoi(( 将读取的每个字符串转换为整数。这也将允许您读取包含多个数字的数字。
因此,请尝试更改parseInts((,如下所示:
std::vector<int> parseInts(string str) {
// Complete this function
std::stringstream ss(str);
std::vector<int> v;
std::string number;
while (getline(ss, number, ','))
{
v.push_back(std::stoi(number));
}
return v;
}
需要注意的一件事是使用>>operator
vsgetline
.前者将读取直到空格或换行符,而后者将读取整行。只有当>>
不包含任何空格时,您才能使用 阅读整行。
这
有什么问题
您以错误的方式从字符串流中读取。
要了解为什么 6030 输入有 630 输出,请试运行代码。您正在从流中读取字符ch
,因此ch
被分配了值'6'
。现在,您再次使用变量i
从 while 循环中的流中读取,但i
是一个整数,因此"030"
转换为30(int)
,最终630
作为输出。
请注意,对于 678、5、10 等情况,您将获得正确的输出,但并非所有测试用例。
这是一种正确的方法:
#include <sstream>
#include <vector>
#include <iostream>
std::vector<int> parseInts(std::string str) {
std::stringstream whole_str(str);
std::string integer_str;
int integer;
std::vector<int> v;
while(whole_str >> integer_str){ // Read 1 integer(string) at a time
std::stringstream one_int(integer_str);
one_int >> integer; // Read and convert string to int
v.push_back(integer);
}
return v;
}
int main() {
std::string str{"100 200 5060 2040"};
std::vector<int> integers = parseInts(str);
for(int i = 0; i < integers.size(); i++) {
std::cout << integers[i] << "n";
}
return 0;
}
输出
100
200
5060
2040
相关文章:
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何在运行中期切换GTK CSS style_context
- 如何在MS Visual Studio 2019中运行QT UI
- 如何通过cpp程序运行shell脚本
- IPC使用多个管道和分支进程来运行Python程序
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 如果第一个元素包含任何零,则我的程序以不希望的方式运行
- 我希望循环运行直到数字为:123
- 当我运行此代码时,它"stopped working"。我希望从 API 调用这个简单的函数
- 我希望程序打印数字 0 到 99,但是当我运行代码时,我看到 100 行 99
- 当我运行c++程序时,我不希望控制台出现
- C++while循环没有按预期/希望的那样运行