C++ 如何在每次循环迭代期间清除字符串中的值?
我想在我的原始数字上附加一个不同的b值,但是在循环一次迭代后(每次cout之后),将原始num值和decVal值刷新回一个空字符串和0。我该怎么做?例如,不是返回001=101011=3,而是得到001=10010111=4C++ 如何在每次循环迭代期间清除字符串中的值?,c++,C++,我想在我的原始数字上附加一个不同的b值,但是在循环一次迭代后(每次cout之后),将原始num值和decVal值刷新回一个空字符串和0。我该怎么做?例如,不是返回001=101011=3,而是得到001=10010111=4 #include <iostream> #include <iomanip> #include <string> using namespace std; void main() { int n, decVal; int
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
void main()
{
int n, decVal;
int i = 7;
string num, b, originalnum;
cin >> n;
for (x = 0; x < n; ++i)
{
cin >> num;
cin.get(b);
cin.ignore();
originalnum += b;
decVal += atoi(&b) * pow(2, i);
i -= 1;
cout << "The decimal equivalent of " << originalnum << " = " << decVal << endl;
}
}
#包括
#包括
#包括
使用名称空间std;
void main()
{
int n,decVal;
int i=7;
字符串num,b,originalnum;
cin>>n;
对于(x=0;x>num;
cin.get(b);
cin.ignore();
原始数+=b;
decVal+=atoi(&b)*功率(2,i);
i-=1;
不能只需在结束后清除字符串即可
cout << ... << endl;
cout n;
对于(x=0;x>num;
cin.get(b);
cin.ignore();
原始数+=b
decVal+=atoi(&b)*功率(2,i);
i-=1
cout如果我理解您的要求,您希望能够重复输入位数并输出包含位数和十进制值表示的字符串。您希望在不同的迭代之间重置所有变量,以便decVal
。为了实现这一点,以及修复一些错误,您只需d将当前正在做的事情包装到另一个循环中,这样,对于外部循环的每次迭代,您都会处理所有您喜欢的位,并最终输出一个decVal
在查看解决方案之前,如上述注释所述,void main()
仅对独立环境有效(例如,没有微控制器等操作系统),否则,main
的允许声明为int main(void)
和int main(int argc,char*argv[])
(您将看到它是用等效的字符**argv
编写的)。请参阅
在方便的同时,您还需要阅读,以便理解'\n'
和std::endl
之间的区别,请继续阅读
对于每个输入,您必须始终做的一件事是,在尝试输入之后和使用输入填充的变量之前,通过检查流状态来验证输入是否成功。如果出现匹配失败,将设置故障位
,并且您必须在尝试下一次输入之前清除错误位。您可以以任何方式处理错误您喜欢结束程序,或者清除错误位并删除导致.ignore()
出现问题的字符(这两种方法的示例如下所示)。基本上,您至少需要:
if (!(std::cin >> n)) { /* validate EVERY user input */
std::cerr << "invalid unsigned input -- exiting.\n";
return 1;
}
注意:所有变量都是在循环中声明的,因此对于每个迭代,每次都会声明和初始化变量。在上面,用户被告知按'q'
退出,但可以输入任何无效的数字退出。这将简单地退出程序,将控件返回到调用进程
看看你的代码,pow()只需使用左移位,即可通过当前循环计数器的位数对每个输入进行移位
使用上面描述的左移位来计算decVal
(确保decVal
在声明时初始化为零),并将用户输入添加到字符串的前面以保留LSB一阶,您可以执行以下操作:
while (1) { /* outer loop - loop continually */
size_t n; /* declare variables within loop */
uint32_t decVal = 0;
std::string originalnum {};
std::cout << "\nenter no. of bits ('q' to quit): ";
if (!(std::cin >> n)) { /* validate EVERY user input */
std::cerr << "invalid unsigned input -- exiting.\n";
return 1;
}
#include <iostream>
#include <iomanip>
#include <string>
#include <limits>
#include <climits>
int main (void)
{
while (1) { /* outer loop - loop continually */
size_t n; /* declare variables within loop */
uint32_t decVal = 0;
std::string originalnum {};
std::cout << "\nenter no. of bits ('q' to quit): ";
if (!(std::cin >> n)) { /* validate EVERY user input */
std::cerr << "invalid unsigned input -- exiting.\n";
return 1;
}
if (n > sizeof (uint32_t) * CHAR_BIT) { /* validate EVERY value in range */
std::cerr << " error: n exceeds no. of bits avaialble.\n";
return 1;
}
for (size_t i = 0; i < n;) { /* inner loop, process bits */
uint32_t bit;
std::cout << " bit" << std::setw(2) << i << ": ";
if (!(std::cin >> bit) || bit > 1) {
std::cerr << " error: invalid bit input.\n";
std::cin.clear();
std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
continue;
}
decVal += bit << i; /* no need for pow(), left-shift */
originalnum.insert(0, 1, bit + '0'); /* build originalnum each iteration */
i++; /* increemnt on good input */
}
/* result */
std:: cout << "The decimal equivalent of " << originalnum <<
" = " << decVal << '\n';
}
}
查看其他内容,如果有其他问题,请告诉我,否则我会误解你的意图。< /p>声明要在循环内而不是在循环之前重新设置的字符串变量。C++中的一个关键概念是将变量的范围限制在最小的需要范围内。不编译。您在一些地方缺少分号,并且
atoi(&b)
中存在类型不匹配。除非您是在独立环境(没有任何操作系统)中编程,否则在符合标准的实现中,main
的允许声明是int main(void)
和int main(int argc,char*argv[])
(您将看到它是用等效的char**argv
编写的)。请参阅:不要使用pow(2,i)
。使用1
#include <iostream>
#include <iomanip>
#include <string>
#include <limits>
#include <climits>
int main (void)
{
while (1) { /* outer loop - loop continually */
size_t n; /* declare variables within loop */
uint32_t decVal = 0;
std::string originalnum {};
std::cout << "\nenter no. of bits ('q' to quit): ";
if (!(std::cin >> n)) { /* validate EVERY user input */
std::cerr << "invalid unsigned input -- exiting.\n";
return 1;
}
if (n > sizeof (uint32_t) * CHAR_BIT) { /* validate EVERY value in range */
std::cerr << " error: n exceeds no. of bits avaialble.\n";
return 1;
}
for (size_t i = 0; i < n;) { /* inner loop, process bits */
uint32_t bit;
std::cout << " bit" << std::setw(2) << i << ": ";
if (!(std::cin >> bit) || bit > 1) {
std::cerr << " error: invalid bit input.\n";
std::cin.clear();
std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
continue;
}
decVal += bit << i; /* no need for pow(), left-shift */
originalnum.insert(0, 1, bit + '0'); /* build originalnum each iteration */
i++; /* increemnt on good input */
}
/* result */
std:: cout << "The decimal equivalent of " << originalnum <<
" = " << decVal << '\n';
}
}