将输入分配给字符串,int数组和int的问题
Problem about assigning input to a string, int array and int
我想采取输入int1 int2 ... intn functioninitial param1 param2。int1 to intn将存储在int数组中,功能性将包含两个alpha字符,而param1和param2将存储在两个不同的int。
中我面临的问题是我的代码不适用于3或以上的数字号码。在我的以下代码中,如果我的输入是11 22 33 AB 44 55
,则可以正常工作。但是,如果我将输入更改为111 222 333 AB 444 555
,则它的运行不佳。我知道问题是在for循环i = i 2,但我不知道如何使我的功能使用不同的数字来工作。谁能帮助我修复我的代码?
#include <sstream>
#include <iostream>
#include <string>
using namespace std;
int main(){
string inputstr;
string function;
int arr[100] = {0};
int i = 0;
int para1;
int para2;
stringstream ss;
getline(cin, inputstr);
ss << inputstr;
for(i=0;i<inputstr.length();i+= 2){
if(isdigit(inputstr[i])){
ss >> arr[i];
cout<<"int: "<<arr[i]<<endl;
}
else if(isalpha(inputstr[i])){
ss>>function;
break;
}
}
ss>>para1;
ss>>para2;
cout<<"parameter1: "<<para1<<endl;
cout<<"parameter2: "<<para2<<endl;
cout<<"function: "<<function<<endl;
}
您要到达那里,而我同意Bruno和使用std::vector
,使用您的基本类型数组,您可以做:
#include <iostream>
#include <sstream>
#include <string>
#define MAXN 100
int main (void) {
std::string inputstr, function;
int arr[MAXN], i, n = 0, para1, para2;
std::stringstream ss;
if (!getline (std::cin, inputstr)) { /* validate read of line */
std::cerr << "user canceled or input error.n";
return 1;
}
ss << inputstr; /* transfer line to stringstream */
while (n < MAXN && (ss >> arr[n])) /* read ints until function */
n++;
ss.clear(); /* clear failbit */
if (!(ss >> function)) { /* validate read of function */
std::cerr << "error: no function read.n";
return 1;
}
if (!(ss >> para1) || !(ss >> para2)) { /* validate read of 2 params */
std::cerr << "error: failed to read 2 parameters.n";
return 1;
}
/* output function (para1, para2) followed by integer values */
std::cout << 'n' << function << "(" << para1 << ", " << para2 << ")n";
for (i = 0; i < n; i++)
std::cout << " " << arr[i];
std::cout << 'n';
}
无论您使用vector
还是int arr[]
,方法都是相同的。读取存储它们的int
值,直到您的读取失败function
。ss.clear();
清除failbit
,然后读取function
和para1
和para2
,验证每个读取的成功。
示例使用/输出
$ ./bin/fnparams
111 222 otherFunc 333 444
otherFunc(333, 444)
111 222
或
$ ./bin/fnparams
1 22 333 4444 55555 secretFunc 66 777
secretFunc(66, 777)
1 22 333 4444 55555
做
for(i=0;i<inputstr.length();i++){ if(isdigit(inputstr[i])){ ss >> arr[i]; cout<<"int: "<<arr[i]<<endl; } else if(isalpha(inputstr[i])){ function += inputstr[i]; }
您的 for 每个字符的进度字符,而读取元素的字符超过1个字符,并且还有分隔符,您的测试 isxxxx 与下一个读取元素不一致,当然,元素比字符串中的字符数少。要使用用于 inputstr 将值放入 arr 中的索引 i 也是错误的
例如使用输入11 22 33 AB 44 55
:
- i = 0和
isdigit(inputstr[i])
是的,您提取 11 从 ss 中,然后将其放在arr[0]
中 - i = 1 and
isdigit(inputstr[i])
是的,您提取 22 从 ss 中,然后将其放在arr[1]
中 - i = 2,
isdigit(inputstr[i])
和isalpha(inputstr[i])
都是false - i = 3和
isdigit(inputstr[i])
true,您从 ss 中提取 33 ,然后将其放入arr[3]
中,并且您没有在具有不确定值<的arr[2]
中放置一个值>的CC_22中放置一个值> - i = 4和
isdigit(inputstr[i])
是的,您尝试从 ss 提取 int 流正在错误,没有清除错误,您将无法从中读取某些内容 - 直到的末端,您什么都不做,因为流正在错误,所以不会设置 function ,并且将保持空
- 循环后,流仍在错误,您将无法设置_Param18和 param2 ,其价值保持不确定
只需读取号码,而您可以拥有您的功能,然后再次阅读2个数字
我还建议您使用 std :: vector 而不是数组
示例:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
// read ints
vector<int> v;
int i;
while (cin >> i)
v.push_back(i);
// not an int, is the FUNCTIONINITIAL
string function;
cin.clear(); // clear error
if (! (cin >> function))
// EOF
return -1;
int param1, param2;
if (! (cin >> param1 >> param2))
// not numbers or EOF
return -1;
// debug
cout << "ints are";
for (auto n : v)
cout << ' ' << n;
cout << 'n' << function << '(' << param1 << ',' << param2 << ')' << endl;
}
汇编和执行:
pi@raspberrypi:/tmp $ g++ -pedantic -Wall -Wextra c.cc
pi@raspberrypi:/tmp $ ./a.out
11 22 33 AB 44 55
ints are 11 22 33
AB(44,55)
pi@raspberrypi:/tmp $
相关文章:
- 按字符值访问int数组
- 将 int 数组转换为 std::vector<int*>
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 整数区间(或 int 数组)中每个数字的出现次数
- Int 数组到C++容器
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- 如何检测将文本文件读入 int 数组的新行
- C++快速将 int 数组内容转储到文本文件中
- <string> 如何在使用 SWIG 时将 int 数组和 List 作为参数传递给 C# C++
- 如何制作不允许重复值的 C++ int 数组循环?
- 如何将逗号分隔的文件读取为 2D int 数组?
- int 数组,但索引是字符?
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 将 int 数组转换为带有小数C++的双精度数组
- 将双精度值分配给 int 数组时的类型转换
- 已编辑 我如何将其拆分为 char 和 int 数组
- 从 C++ 中的 int ** 数组访问元素
- C++程序无法分配 int 数组?
- 我正在编写一个代码来将 int 数组存储在文件中,然后用 c++ 检索它,但是检索第一项是假值,我该如何解决这个问题?
- 如何通过头文件中的函数初始化 const int 数组?