Auto not being recognised by the compiler, what would be the best replacement?
Posted
by
user1719605
on Stack Overflow
See other posts from Stack Overflow
or by user1719605
Published on 2013-10-18T03:50:27Z
Indexed on
2013/10/18
3:53 UTC
Read the original article
Hit count: 133
So I have wrote a program that uses auto however the compiler doesn't seem to recognize it, probably it is an earlier compiler.
I was wondering for my code, with are suitable variables to fix my code so that I do not need to use the auto keyword? I'm thinking a pointer to a string? or a string iterator, though I am not sure.
#include <cstdlib>
#include <string>
#include <iostream>
#include <unistd.h>
#include <algorithm>
using namespace std;
int main(int argc, char* argv[]) {
enum MODE {
WHOLE, PREFIX, SUFFIX, ANYWHERE, EMBEDDED
} mode = WHOLE;
bool reverse_match = false;
int c;
while ((c = getopt(argc, argv, ":wpsaev")) != -1) {
switch (c) {
case 'w': // pattern matches whole word
mode = WHOLE;
break;
case 'p': // pattern matches prefix
mode = PREFIX;
break;
case 'a': // pattern matches anywhere
mode = ANYWHERE;
break;
case 's': // pattern matches suffix
mode = SUFFIX;
break;
case 'e': // pattern matches anywhere
mode = EMBEDDED;
break;
case 'v': // reverse sense of match
reverse_match = true;
break;
}
}
argc -= optind;
argv += optind;
string pattern = argv[0];
string word;
int matches = 0;
while (cin >> word) {
switch (mode) {
case WHOLE:
if (reverse_match) {
if (pattern != word) {
matches += 1;
cout << word << endl;
}
} else if (pattern == word) {
matches += 1;
cout << word << endl;
}
break;
case PREFIX:
if (pattern.size() <= word.size()) {
auto res = mismatch(pattern.begin(), pattern.end(), word.begin());
if (reverse_match) {
if (res.first != word.end()) {
matches += 1;
cout << word << endl;
}
} else if (res.first == word.end()) {
matches += 1;
cout << word << endl;
}
}
break;
case ANYWHERE:
if (reverse_match) {
if (!word.find(pattern) != string::npos) {
matches += 1;
cout << word << endl;
}
} else if (word.find(pattern) != string::npos) {
matches += 1;
cout << word << endl;
}
break;
case SUFFIX:
if (pattern.size() <= word.size()) {
auto res = mismatch(pattern.rbegin(), pattern.rend(), word.rbegin());
if (reverse_match) {
if (res.first != word.rend()) {
matches = +1;
cout << word << endl;
}
} else if (res.first == word.rend()) {
matches = +1;
cout << word << endl;
}
}
break;
case EMBEDDED:
if (reverse_match) {
if (!pattern.find(word) != string::npos) {
matches += 1;
cout << word << endl;}
} else if (pattern.find(word) != string::npos) {
matches += 1;
cout
<< word << endl;
}
break;
}
}
return (matches == 0) ? 1 : 0;
}
Thanks in advance!
© Stack Overflow or respective owner