簡體   English   中英

用字符串查找問題的C ++腳本

[英]c++ Script that finds questions in string

我是編碼新手,已經編碼了大約一周,並且我正在嘗試編寫一個找到“?”的腳本。 和“。” 在腳本中,然后輸出它們在腳本中的位置,我使用這些值將問題打印到文本文件中。

除非它不能真正起作用。

如果您這樣輸入值,它將起作用。

myfile << test.substr( 18, 20 ) 

但是這樣就行不通了,它只是從點[0]的值開始打印整個腳本,直到腳本結束為止。

myfile << test.substr( dot[0], interrogation[0] )

我用來查找“?”的方式 字符串中的位置也不是很准確。

哪里有。

    if(x > 0){ 

我有一個while循環,但出於調試原因而將其替換。 這是整個代碼。 如果您能幫助我,我將不勝感激。 謝謝。

#include <fstream>
#include <iostream>
#include <string>
#include <vector>
using namespace std;


int main (){



std::vector< int > interrogation ;
std::vector< int > dot;



string look = "?";
string look_again = ".";


string test = "ver. o que e isto? nao sei. ola? adeus. fghfghfhfghf";



string::size_type pos = test.find(look);
string::size_type sop = test.find(look_again);
string::size_type exc = test.find(look_again_again);


while (pos != std::string::npos)
{



int a = pos ;
int b = sop;



   cout << " . found at : " << sop << std::endl;
   cout << " ? found at : " << pos << std::endl;

interrogation.push_back(a);
dot.push_back(b);


string fragment = test.substr (0 , pos );    // works
//cout << fragment << endl ;

string fragment2 = test.substr (0 , sop );    // works
//cout << fragment2 << endl ;


  pos = test.find(look, pos + 1);
  sop = test.find(look_again, sop + 1);

}





int x = 1;

if(x > 0){





int a = 1;

int q = dot[a];
int w = interrogation[a];
// to save text


// to save text
string save = "saved_question.txt" ;
ofstream myfile;
myfile.open (save.c_str(), ios::app);
myfile << test.substr( 18, 20 ) + "\n"  ;
myfile.close();


cout << "Question saved in text file" << endl;




}



}

該代碼尚未完成,但我得到了幫助。 謝謝

#include <fstream>
#include <iostream>
#include <string>
#include <vector>
using namespace std;


int main (){



std::vector< int > interrogation ;
std::vector< int > dot;
//std::vector< int > exclamation;



string look = "?";
string look_again = ".";
string look_again_again = "!";

string test = " ver.o que e isto? nao sei. ola? adeus.";



string::size_type pos = test.find(look);
string::size_type sop = test.find(look_again);



while (pos != std::string::npos)
{



int a = pos ;
int b = sop;



   cout << " . found at : " << sop << std::endl;
   cout << " ? found at : " << pos << std::endl;
  // cout << " ! found at : " << exc << std::endl;

interrogation.push_back(a);
dot.push_back(b);
//exclamation.push_back(c);

string fragment = test.substr (0 , pos  );    // works
//cout << fragment << endl ;

string fragment2 = test.substr (0 , sop) ;    // works
//cout << fragment2 << endl ;



string fragment3 = test.substr (dot.back() + 1,  interrogation.back() -       dot.back());    // works
cout << fragment3 << endl ;




  pos = test.find(look, pos + 1);
  sop = test.find(look_again, sop + 1);





}
}

您可以執行以下操作:

void function(string str) {
  string sentence = "";
  for(int i=0; i < str.length(); i++) {
      if(str[i] == '.' || str[i] == '!')
          sentence = ""; // the sentence is not a question so clear the sentence
      else if(str[i] == '?') {
          sentence.push_back(str[i]);
          cout << sentence << endl; // output the question - just replace cout with your ofstream
      }
      else
          sentence.push_back(str[i]);
  }
}

我想我以前看過這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM