Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在每次循环迭代期间清除字符串中的值?_C++ - Fatal编程技术网

C++ 如何在每次循环迭代期间清除字符串中的值?

C++ 如何在每次循环迭代期间清除字符串中的值?,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

我想在我的原始数字上附加一个不同的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 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';
    }
}