By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,984 Members | 1,461 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,984 IT Pros & Developers. It's quick & easy.

Modify some elements of vector

P: n/a
Hi,
I am trying to compare 2 vectors of different sizes, and if the same
element exists in both, I want to replace them by the text "aa". I
thought this would work, but it replaces the entire array with just
"aa". I'm not sure how else to do what I want to do
for (unsigned int i=0; i<a_word_list.size(); i++)
{
for (unsigned int j=0; j<n_word_list.size();j++)
{
if (a_word_list[i].compare( n_word_list[j]))
{
a_word_list.assign(1,"aa");

n_word_list.assign(1,"aa");

}
}
}

Jun 17 '07 #1
Share this Question
Share on Google+
4 Replies


P: n/a
aa******@gmail.com wrote:
Hi,
I am trying to compare 2 vectors of different sizes, and if the same
element exists in both, I want to replace them by the text "aa". I
thought this would work, but it replaces the entire array with just
"aa". I'm not sure how else to do what I want to do
for (unsigned int i=0; i<a_word_list.size(); i++)
{
for (unsigned int j=0; j<n_word_list.size();j++)
{
if (a_word_list[i].compare( n_word_list[j]))
{
a_word_list.assign(1,"aa");

n_word_list.assign(1,"aa");

}
}
}
That's what assign does, it assigns the whole array. Also you are using
compare wrongly, compare returns 0 (i.e. false) if two items compare
equal. But you don't need compare, just use ==.

This looks more like it

for (unsigned int i=0; i<a_word_list.size(); i++)
{
bool replaced = false;
for (unsigned int j=0; j<n_word_list.size();j++)
{
if (a_word_list[i] == n_word_list[j])
{
n_word_list[j] = "aa";
replaced = true;
}
}
if (replaced)
n_word_list[i] = "aa";
}

I guess the trick is using the 'replaced' variable to track of if you've
made any changes to n_word_list, so at the end of the loop you know
whether to make the same change to a_word_list.

john
Jun 17 '07 #2

P: n/a
aa******@gmail.com wrote:
Hi,
I am trying to compare 2 vectors of different sizes, and if the same
element exists in both, I want to replace them by the text "aa". I
thought this would work, but it replaces the entire array with just
"aa". I'm not sure how else to do what I want to do
for (unsigned int i=0; i<a_word_list.size(); i++)
{
for (unsigned int j=0; j<n_word_list.size();j++)
{
if (a_word_list[i].compare( n_word_list[j]))
I'm assuming the wordlists holds elements of std::string? In that case you
should do:

if (a_word_list[i] == n_word_list[j])

The compare member function returns 0 if the strings are equal, a negative
number if the first is less than the second, and a positive value
otherwise. It's more or less the same as strcmp() in C.
{
a_word_list.assign(1,"aa");

n_word_list.assign(1,"aa");

}
}
}
--
rbh
Jun 17 '07 #3

P: n/a
>
for (unsigned int i=0; i<a_word_list.size(); i++)
{
bool replaced = false;
for (unsigned int j=0; j<n_word_list.size();j++)
{
if (a_word_list[i] == n_word_list[j])
{
n_word_list[j] = "aa";
replaced = true;
}
}
if (replaced)
n_word_list[i] = "aa";
Typo, last line should be

a_word_list[i] = "aa";
Jun 17 '07 #4

P: n/a
On Jun 17, 1:34 pm, John Harrison <john_androni...@hotmail.comwrote:
aarth...@gmail.com wrote:
I am trying to compare 2 vectors of different sizes, and if the same
element exists in both, I want to replace them by the text "aa". I
thought this would work, but it replaces the entire array with just
"aa". I'm not sure how else to do what I want to do
for (unsigned int i=0; i<a_word_list.size(); i++)
{
for (unsigned int j=0; j<n_word_list.size();j++)
{
if (a_word_list[i].compare( n_word_list[j]))
{
a_word_list.assign(1,"aa");
n_word_list.assign(1,"aa");
}
}
}
That's what assign does, it assigns the whole array. Also you are using
compare wrongly, compare returns 0 (i.e. false) if two items compare
equal. But you don't need compare, just use ==.
Especially since compare returns 0 (which converts to false) if
the two strings are equal:-).

--
James Kanze (Gabi Software) email: ja*********@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Jun 17 '07 #5

This discussion thread is closed

Replies have been disabled for this discussion.