Translate Perl AI Script to C++ for 20 Questions: Expert Help Available

  • Thread starter Thread starter franznietzsche
  • Start date Start date
  • Tags Tags
    Code
AI Thread Summary
An AI script for a twenty questions game was originally written in Perl and needs to be translated into C++. The script prompts the user for questions, checks for specific conditions, and provides responses based on the input. Key functionalities include checking if the last character of the input is a vowel and recognizing certain keywords like "everything" or "anything." Suggestions for C++ implementation include using standard input/output and string manipulation functions. The discussion highlights that regular expressions are not necessary in C++, and alternatives like `strstr` and `strchr` can be used for substring searches. A simplified C++ version of the program was provided, focusing on the core logic without the original Perl conditionals. The original author expressed limited knowledge of C++, prompting the request for assistance in translating the code.
franznietzsche
Messages
1,503
Reaction score
6
I wrote an (small) AI script for twenty questions in perl, however i need the code translated into C++ (i ahve some knowledge of C++, but not enough to write this program). Thanx for the help:

Code:
#!/usr/bin/perl

use warnings;

$ans = 0;
$qnumber = 1;

while (($ans == 0)&& ($qnumber < 20)) {
    print "Ask a question: \n";
    $_ = <STDIN>;
    
    if (/end/ && /vowel/ && (/everything/ || /anything/)){
	print "You got it right!\n";
	$ans = 1;
    } elsif (/a$/ or /e$/ or /i$/ or /o$/  or /u$/ or /a\?$/ or /e\?$/ or /i\?$/ or /o\?$/  or /u\?$/ ) {
	print "Yes\n";
    } else {
	print "No\n";
    }
    $qnumber ++ ; 
    if ($qnumber == 20){
	print "You've run out of questions.  Better luck next time!\n";
    }
}
 
Computer science news on Phys.org
Or at least direct me to a resource that would cover everything needed to write this in C++?
 
yeah the C++ tutorial here doesn't cover regular expressions and patterns, i already checked that. The code checks for a vowel at the end of whatever string is input into it.
 
You don't need to use regular expressions in c in order to find substrings and characters.
You can use the c functions strstr and strchr.

By the way, the line in your perl program:

Code:
elsif (/a$/ or /e$/ or /i$/ or /o$/  or /u$/ or /a\?$/ or /e\?$/ or /i\?$/ or /o\?$/  or /u\?$/ ) {
would be better written:

Code:
elsif(/[aeiou]\??$/)
 
noelhustler said:
You don't need to use regular expressions in c in order to find substrings and characters.
You can use the c functions strstr and strchr.

By the way, the line in your perl program:

Code:
elsif (/a$/ or /e$/ or /i$/ or /o$/  or /u$/ or /a\?$/ or /e\?$/ or /i\?$/ or /o\?$/  or /u\?$/ ) {
would be better written:

Code:
elsif(/[aeiou]\??$/)

I'm rather new to perl, but yeah i have condensed it quite a bit from what i posted here.

I have a very limited knowledge of C++ (i can write a program to solve equations, but that's about all). HOw do you use those functions?
 
strstr
and
strchr

You don't need to use c++ to write a program like that. You can stick with plain c.
 
most of the program is easy to change, but the checking for the expressions needs some more work. I do not know what the Perl expressions mean, especially (/everything/ || /anything/) seems mysterious to me, but anyway here is the C++ translation without the conditionals:

Code:
#include <iostream>
#include <string>
using namespace std;

int main()
{
  int ans = 0;
  int qnumber = 1;
  string question;

  while (ans == 0 && qnumber < 20) {
    cout << "Ask a question: " << endl;
    cin >> question;
    
    if (...){
	cout << "You got it right!" << endl;
	ans = 1;
    } elsif (...) {
	cout << "Yes" << endl;
    } else {
	cout << "No" << endl;
    }
    qnumber++; 
    if (qnumber == 20){
	cout << "You've run out of questions.  Better luck next time!" << endl;
    }
  }
}

franznietzsche said:
The code checks for a vowel at the end of whatever string is input into it.
You can do that with:
Code:
char c = question[strlen(question) - 1];

if (c == 'a' || c == 'e' || c == 'u' || c == 'o' || c == 'i')
  ...
 
Well, if it helps, this is not class work.

It was a late night replacement for sleep (my insomnia is that bad). But i wanted to send it to a friend for him to toy around with, but i didn't know C++ well enough to write this (its the only language he's learned so far), so i had to write it in Perl.
 
Back
Top