我需要我的程序读取用户输入的一串数字,然后将每个数字分配给一个int变量:
94715由用户输入为字符串
然后
a=9
b=4
c=7
d=1
e=5
所以我可以
if (a < b), c*d+e, a-e, etc
我搜索了一些命令(getline,string.substr(ind,n),getc,fgetc,atoi等)我知道我很接近,但我找不到我正在寻找的确切内容的例子
我找到的最简单,最直接的方式是
stringstream convert(string1);
convert>>variable;
但它会转换整个字符串,如果有办法在其中添加ind位置,如
string1.substr(0,1)
那就是诀窍......
答案 0 :(得分:1)
就这么简单:
std::string num = "94715";
size_t i = 0;
assert( num.length() > 4 );
int a = num[i++] - '0';
int b = num[i++] - '0';
int c = num[i++] - '0';
int d = num[i++] - '0';
int e = num[i++] - '0';
注意:这可能无法在不使用ACII编码的系统上正常工作,但您不太可能遇到此类问题。
答案 1 :(得分:0)
int number = 9544;
int vector[10]; // you can make it as big as you want or simply use std::vector
int position = 0;
while (number != 0)
{
vector[position++] = number % 10; // this assigns the last digit
number = number / 10; // remove the last digit
}
for(int i=0; i<position; i++)
std::cout << vector[i]; // this will print 4459
现在你在int矢量中有你的数字。
答案 2 :(得分:-1)
此示例使用字符,因为字符串仍然是char数组。
这适用于您使用Windows的情况。只需输入并按下enter
键即可。
就像迪特尔·吕克(DieterLücking)所说的那样,它具有这个特点。
它使用kbhit()
中的getch()
和conio.h
来处理单个字符。
然后它将字符乘以适当的位置以获得完整的整数。
然后将它们存储在数组digitArray[ ]
中,然后将它们分配给a
,b
,c
,d
或e
。现在,您可以对a
,b
,c
,d
和e
执行任何操作。
以下是一些要演示的代码。
// Re: Now it is just clunky
// one ten hundred thousand
// 1 2 3 4
//digitn=digitArray[3]*1 + digitArray[2]*10 +digitArray[1]*100 +digitArray[0]*1000
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
int digit=0,digitInput=0;
int digitArray[10]={0},digitn;
int numberOfInputDigits=7;
void SplitIntoDigits(void);
int a=0,b=0,c=0,d=0,e=0,f=0;
int main(){
system("color 1F"); //Blue background
while(1){
cout<<"\nPlease enter number. Max Input is "<<numberOfInputDigits<<" individual digits \n";
cout<<"or press enter when done \n>" ;
memset(digitArray,0,sizeof(digitArray));
a=0;b=0;c=0;d=0;e=0;f=0;
SplitIntoDigits();
//cout<<"\n"<<digitArray[7]="<<digitArray[7];
cout<<"\n\n";
a = digitArray[0];
b = digitArray[1];
c = digitArray[2];
d = digitArray[3];
e = digitArray[4];
f = digitArray[5];
cout<<"a = "<< a <<"\n";
cout<<"b = "<< b <<"\n";
cout<<"c = "<< c <<"\n";
cout<<"d = "<< d <<"\n";
cout<<"e = "<< e <<"\n";
cout<<"f = "<< f <<"\n";
cout<<"\n\n The whole combined int number is "<<digitn<<"\n\n";
}
return 0;
}
/*********************************
* *
********************************/
void SplitIntoDigits(void){
digitArray[0]=0;
digitArray[1]=0;
digit=0;
digitInput=0;
while((digit<numberOfInputDigits)){
if (kbhit()){
digitInput=getch();
if (digitInput==27) exit(0);
if ((digitInput>47) && (digitInput<59)) {
digitArray[digit]=(unsigned char)digitInput-48;
digit++;
cout<<digitInput-48;
}
if (digitInput==13) { digitn=digitArray[0]; break; }
}
}
switch(digit) {
case 0:
case 1:
digitn=digitArray[0]*1 ;
break;
case 2:
digitn= digitArray[1]*1 +digitArray[0]*10 ;
break;
case 3:
digitn= digitArray[2]*1+digitArray[1]*10 +digitArray[0]*100 ;
break;
case 4:
digitn=digitArray[3]*1+digitArray[2]*10+digitArray[1]*100+digitArray[0]*1000 ;
break;
case 5:
digitn=digitArray[4]*1+digitArray[3]*10+digitArray[2]*100+digitArray[1]*1000+digitArray[0]*10000 ;
break;
case 6:
digitn=digitArray[5]*1+digitArray[4]*10+digitArray[3]*100+digitArray[2]*1000+digitArray[1]*10000
+digitArray[0]*100000;
break;
case 7:
digitn=digitArray[6]*1+digitArray[5]*10+digitArray[4]*100+digitArray[3]*1000+digitArray[2]*10000
+digitArray[1]*100000 +digitArray[0]*1000000;
break;
case 8:
digitn=digitArray[7]*1+digitArray[6]*10+digitArray[5]*100+digitArray[4]*1000+digitArray[3]*10000
+digitArray[2]*100000 +digitArray[1]*1000000+digitArray[0]*10000000;
break;
case 9:
digitn=digitArray[8]*1+digitArray[7]*10+digitArray[6]*100+digitArray[5]*1000+digitArray[4]*10000
+digitArray[3]*100000 +digitArray[2]*1000000+digitArray[1]*10000000 +digitArray[0]*100000000;
break;
}
// if (digitInput!=13) digitn=digitArray[3]*1+digitArray[2]*10+digitArray[1]*100+digitArray[0]*1000 ;
//cout<<("\n%i\n\n",digitn);
}
/*********************************
* *
********************************/