C ++字符串push_back函数不起作用

Posted

技术标签:

【中文标题】C ++字符串push_back函数不起作用【英文标题】:C++ string push_back function not working 【发布时间】:2021-02-14 03:02:08 【问题描述】:

我正在尝试使用整数队列生成带有 0, 1, 2 的字符串来存储数字,直到我准备好检查它们是否是二进制数字。我从单个数字开始,然后附加它们以获得越来越长的数字字符串。所以我想要得到的顺序是 0, 1, 2, 00, 01, 02, 10, 11, 12, 20, 21, 22, 000, 001, 002, 010, 011, 012 等等。我遇到的问题是,当我从队列中取出一个整数时,将其转换为字符串并尝试使用 s.push_back(app) 将其附加到 0, 1, 2,没有附加任何内容。下面是我的代码和输出。

int main()

  string s; //holds strings of numbers that come from the int queue                                                                                                                                                                                                           
  bool isBin; //holds the boolean value returned from recognizer                                                                                                                                                                                                              
  int count=0; //while loop counter to not go over 20 iterations                                                                                                                                                                                                              
  Queue myQ; //queue created to hold all values generated                                                                                                                                                                                                                     
  int numHolder; //holds values dequeued from int queue to be turned into string                                                                                                                                                                                              


  myQ.enQueue(0);//queue 3 initial values to work with                                                                                                                                                                                                                        
  myQ.enQueue(1);
  myQ.enQueue(2);

  while(count<=20)//while loop doesnt go over 20 iterations of binary numbers                                                                                                                                                                                                 
    
      numHolder=myQ.deQueue();//holds int values dequeued from queue                                                                                                                                                                                                          
      s=to_string(numHolder);//converts the int from queue to a string                                                                                                                                                                                                        

      /* isBin=recognizer(s);//send the string to the recognizer                                                                                                                                                                                                              
      if(isBin==true)                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                             
          cout<<s<<endl;//prints string if it is binary number                                                                                                                                                                                                                
          count++;//increment counter because string was binary                                                                                                                                                                                                               
          */
      for(int i=0; i<3; i++)//this loop adds 0 then 1 then 2 to the end of each dequeued string                                                                                                                                                                               
        
          char app = i;
          s.push_back(app);//this is where string is appended with 0 1 or 2                                                                                                                                                                                                   
          cout<<s<<endl;
          int newNum=stoi(s);//new appended string is turned into integer                                                                                                                                                                                                     
          myQ.enQueue(newNum);//new integer is put into queue                                                                                                                                                                                                                 
          s.pop_back();//pops back the string so other numbers can be created with the original dequeued string                                                                                                                                                               

        
      count++;
    
      // // end of while                                                                                                                                                                                                                                                     

// end of main                                                                                                                                                                                                                                                               


输出:

0 0 0 1 1 1 2 2 2 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

我可以从输出中看出它的第一个字符的顺序是正确的,但是没有附加任何内容,因为字符串 push_back 函数不起作用。请帮忙!

【问题讨论】:

s=to_strung(numHolder); 覆盖s 的内容 【参考方案1】:

char app=i存储二进制值为012的字符,而不是字符'0''1''2'

试试char app = '0'+i;

在 C/C++ 中,char 既是数字类型,也是存储单个字符的传统方式。 int 的转换只是将 char 视为数字类型。

【讨论】:

以上是关于C ++字符串push_back函数不起作用的主要内容,如果未能解决你的问题,请参考以下文章

C# Split() 函数不起作用

除非涉及 endl,否则返回字符串的 C++ 函数不起作用...?

循环向量不起作用::向量下标超出范围[重复]

Selenium + C#:ExecuteAsyncScript 不起作用

如何返回对象C ++的数组[重复]

#include 守卫不起作用 - 或者我不明白