遍历字符串的代码的字符串下标超出范围错误c ++
String subscript out of range error for code that traverses string c++
我正在尝试计算 space 分隔整数字符串中正数、负数和零的数量。输入字符串中的整数个数由用户指定。
代码编译正常,但是每次我尝试 运行 它时,它都会崩溃并出现错误“调试断言失败。...表达式:字符串下标超出范围”。
#include <iostream>
#include <string>
#include <iomanip>
int main() {
int i = 0;
int n, x;
int positives = 0;
int negatives = 0;
int zeros = 0;
std::string ip;
char space = ' ';
std::cin >> n;
std::cin >> ip;
while (i < n) {
if (ip[i] != space) {
x = (ip[i]);
if (x > 0) {
positives++;
}
else if (x < 0) {
negatives++;
}
else if (x == 0) {
zeros++;
}
}
i++;
}
}
首先 std::cin >> some_string_var
将在它找到的第一个白色 space 字符处 停止,因此使用它来搜索没有什么意义spaces 分隔单词。
你最好只读入 整数 并将它们直接与零进行比较。以下是如何在代码中使用 MNC(最少的必要更改):
#include <iostream>
int main() {
int i = 0;
int n;
int positives = 0;
int negatives = 0;
int zeros = 0;
int value;
std::cin >> n;
while (i < n) {
std::cin >> value;
if (value > 0)
positives++;
else if (value < 0)
negatives++;
else
zeros++;
i++;
}
std::cout << "p=" << positives << ", n=" << negatives << ", z=" << zeros << '\n';
}
下面是示例 运行,请记住初始 4
是一个计数而不是其中一个值:
pax:~> ./prog
4
0 1 2 -99
p=2, n=1, z=1
如果您正在寻找更强大的东西,您可以使用这样的东西:
#include <iostream>
int main() {
int quant, pos = 0, neg = 0, zer = 0, value;
std::cout << "How many input values? ";
if (! (std::cin >> quant )) {
std::cout << "\n*** Invalid input.\n";
return 1;
}
if (quant < 0) {
std::cout << "\n*** Negative quantity input.\n";
return 1;
}
for (int count = 1; count <= quant; ++count) {
std::cout << "Enter value #" << count << ": ";
if (! (std::cin >> value )) {
std::cout << "\n*** Invalid input.\n";
return 1;
}
if (value > 0.0)
pos++;
else if (value < 0.0)
neg++;
else
zer++;
}
std::cout << "Positive value count: " << pos << '\n';
std::cout << "Negative value count: " << neg << '\n';
std::cout << "Zero value count: " << zer << '\n';
}
它在与用户的交流方面更加友好(无论是请求的内容还是生成的结果)。它在检测不良输入方面也更加稳健。
我正在尝试计算 space 分隔整数字符串中正数、负数和零的数量。输入字符串中的整数个数由用户指定。
代码编译正常,但是每次我尝试 运行 它时,它都会崩溃并出现错误“调试断言失败。...表达式:字符串下标超出范围”。
#include <iostream>
#include <string>
#include <iomanip>
int main() {
int i = 0;
int n, x;
int positives = 0;
int negatives = 0;
int zeros = 0;
std::string ip;
char space = ' ';
std::cin >> n;
std::cin >> ip;
while (i < n) {
if (ip[i] != space) {
x = (ip[i]);
if (x > 0) {
positives++;
}
else if (x < 0) {
negatives++;
}
else if (x == 0) {
zeros++;
}
}
i++;
}
}
首先 std::cin >> some_string_var
将在它找到的第一个白色 space 字符处 停止,因此使用它来搜索没有什么意义spaces 分隔单词。
你最好只读入 整数 并将它们直接与零进行比较。以下是如何在代码中使用 MNC(最少的必要更改):
#include <iostream>
int main() {
int i = 0;
int n;
int positives = 0;
int negatives = 0;
int zeros = 0;
int value;
std::cin >> n;
while (i < n) {
std::cin >> value;
if (value > 0)
positives++;
else if (value < 0)
negatives++;
else
zeros++;
i++;
}
std::cout << "p=" << positives << ", n=" << negatives << ", z=" << zeros << '\n';
}
下面是示例 运行,请记住初始 4
是一个计数而不是其中一个值:
pax:~> ./prog
4
0 1 2 -99
p=2, n=1, z=1
如果您正在寻找更强大的东西,您可以使用这样的东西:
#include <iostream>
int main() {
int quant, pos = 0, neg = 0, zer = 0, value;
std::cout << "How many input values? ";
if (! (std::cin >> quant )) {
std::cout << "\n*** Invalid input.\n";
return 1;
}
if (quant < 0) {
std::cout << "\n*** Negative quantity input.\n";
return 1;
}
for (int count = 1; count <= quant; ++count) {
std::cout << "Enter value #" << count << ": ";
if (! (std::cin >> value )) {
std::cout << "\n*** Invalid input.\n";
return 1;
}
if (value > 0.0)
pos++;
else if (value < 0.0)
neg++;
else
zer++;
}
std::cout << "Positive value count: " << pos << '\n';
std::cout << "Negative value count: " << neg << '\n';
std::cout << "Zero value count: " << zer << '\n';
}
它在与用户的交流方面更加友好(无论是请求的内容还是生成的结果)。它在检测不良输入方面也更加稳健。