Page 1 of 1

compile error involving STL [ resolved ]

Posted: Thu May 27, 2004 7:32 pm
by coconut
Hi all,

I got Compilation error when I was using STL. I have tried avoid using "using namespace...".. as some have told before, but doesnt' help!

Here' the compilation error in Unix screen (tried to copy all in the screen)

Code: Select all

 g++ 10029.cpp
/usr/local/.5.8/lib/gcc-lib/sparc-sun-solaris2.8/2.95.2/../../../../include/g++-3/std/bastring.:
/usr/local/.5.8/lib/gcc-lib/sparc-sun-solaris2.8/2.95.2/../../../../include/g++-3/std/bastring.e
/usr/local/.5.8/lib/gcc-lib/sparc-sun-solaris2.8/2.95.2/../../../../include/g++-3/std/bastring.'
/usr/local/.5.8/lib/gcc-lib/sparc-sun-solaris2.8/2.95.2/../../../../include/g++-3/std/bastring.'
Here is my source (I think it is not yet correct, pls forgive me for this posting)

Code: Select all

#include<iostream>
#include<map>
#include<string>
#include<cstdio>

#define MAXN 25001

using std::cin;
using std::cout;
using std::map;
using std::endl;
using std::string;

typedef map<string, int> Map;

Map dictionary; 
int n = 0, fx[MAXN], record = 0;

void readData()
{
	string s;

	while (cin>>s)
	{
		dictionary[s] = n++;
	}
}

void check (int d, string s1, string s)
{
	Map::iterator k ;
	k = dictionary.find(s1);
	if ( k != dictionary.end())
	{
		int i = (*k).second;
		if (i < d)
		if (fx[i] + 1 > fx[d]) 
		{
			fx[d] = fx[i] + 1;
			if (fx[d] > record) record = fx[d];
		}
	}
}

void process()
{
	int i, j, k, d = 0;
	memset(fx, 0, sizeof(fx));

	Map::iterator iter;

	for (iter = dictionary.begin(); iter != dictionary.end(); iter++)
	{		
		string s = (*iter).first;
		fx[d] = 1;

		// inserting
		for (j = 0; j < s.length(); j++)
		{
			for (k = 0; k < 26; k++)
			{
				string temp(1, (char)('a'+k)), s1 = s;
				s1.insert(j, temp);
				check (d, s1, s);
			}
		}

		// deleting
		for (j = 0; j < s.length(); j++)
		{
			string s1 = s;
			s1.erase(j,1);
			check(d, s1, s);
		}

		// changing
		for (j = 0; j < s.length(); j++)
		{
			string s1 = s;
			for (k =  0; k < 26; k++)
			{
				string temp(1, 'a' + k);
				s1.erase(j,1);
				s1.insert(j, temp);
				check(d, s1, s);
			}
		}
		d++;
	}

	cout<<record<<endl;
} 


int main()
{
	//freopen("10029.in", "r", stdin);

	readData();
	process();
	
	return 0;
}

For ur info: I failed to compile on O.J. and on SunOS Unix, but can compile using Cygwin

I'm frustrated, pls help

thank friends alot ![/code]

Posted: Thu May 27, 2004 7:49 pm
by UFP2161
[c]string temp (1, 'a' + k);[/c]
The string constructor is expecting an int, and a char .. However, you pass it an int and an int .. (['a' + k] will result in an int type as 'a' can be implicitly converted to int).. so, you should explicitly convert it back into a char like so:
[c]string temp (1, (char) ('a' + k));[/c]

Posted: Fri May 28, 2004 1:59 am
by coconut
Oh thnx so much :D

How come I think that it's an STL problem

Thanks again for your subtle help..