2015-04-15 3 views
-4

Im начинающий для C++. Его первый год в колледже. Im полностью застрял в этом. Мне нужно сделать программу, которая принимает входные 4 строки, а затем проверить, существует ли какое-то значение, если оно существует, тогда существует выходное значение, и если это не так, если все они уникальны (все 4 строки), то вывод их в порядке возрастания. Кодекс ниже работает, и он уже выводит их в порядке возрастания, но как найти, повторяются ли значения перед их написанием?проверить, существует ли значение внутри массива

извините за мой плохой английский, ребята я надеюсь, что у понять, что я пытаюсь сказать здесь

string name[4]; 
string temp; 
for(int i=0;i<4;i++){ 
    cout<<"Enter "<<i+1<<" string"<<endl; 
    getline(cin,name[i]); 
} 

for(int i=0;i<4;i++){ 
    for(int j=i+1;j<4;j++){ 
     if(name[i]>name[j]){ 
      temp=name[i]; 
      name[i]=name[j]; 
      name[j]=temp; 
     } 
    } 
} 

for(int i=0; i<4; i++){ 
    cout<<name[i]<< " "; 
} 
+0

Итак, пользователь не может ввести одно и то же имя дважды? – DaveyLaser

+0

Звучит как задание для 'std :: set', если вам разрешено использовать это. –

+0

Если пользователь вводит одно и то же имя, то программные входы, имена которых уже введены (дубликаты) и программа заканчиваются, если все 4 строки являются уникальной программой, сначала упорядочите их в порядке возрастания, а затем напишите их. – banananos

ответ

0
for(int i=0;i<4;i++){ 
    for(int j=0;j<4;j++){ 
     if((name[i]==name[j]) && (i!=j)){ 
      cout<<"already exits"; 
     } 
+0

Несомненно, сравнение равенства симметрично ?! –

+0

Ye man Я знаю это, но что, если это ложь, и все 4 строки уникальны, как пропустить при проверке и продолжить печатать их в порядке возрастания. Я пробовал еще один, но это не сработает. Я имею в виду, что это работает, но печатает их в пару раз, а не по одному для каждого. – banananos

0

Вы можете использовать сравнение строк, чтобы проверить его, прежде чем нажимать его. Это если вы хотите проверить, что строка является уникальным, если вы не разделяли слова в каждой строке (что немного сложнее

string name[4]; 
string temp; 
for(int i=0;i<4;i++) 
{ 
    cout<<"Enter "<<i+1<<" string"<<endl; 
    getline(cin,name[i]); 
} 
int failed = 0; 
for(int i = 0;i<4;i++) 
{ 
    for(int j=0;j<i;j++) 
    {   
     // Check if the string is the same as any previous strings. 
     if (name[i].compare(name[j]) != 0) 
     { 
      failed = 1; 
      cout<<"String exists multiple times: "<<name[i]; 
     } 
    } 
} 
// Check if there were any shared strings 
if(failed==0) 
{ 
    for(int i=0; i<4; i++) 
    { 
     cout<<name[i]<< " "; 
    } 
} 

Ссылка:. http://www.cplusplus.com/reference/string/string/compare/

+0

Вы можете просто проверить имя [i] == name [j] ' – AndyG

+0

@AndyG True, только мой личный стиль кодирования. Это может быть более читаемым. – Robert

0

Так что лучший способ будет чтобы использовать лучший контейнер!

Позволяет иметь взгляд на std::sethere.

станд :: s et является ассоциативным контейнером, который содержит отсортированный набор уникальных объектов.

Итак, как мы можем лучше всего это использовать, есть много примеров, но мы можем посмотреть на ваш конкретный.

#include <set> // For Set 

int main() { 

    set<string> names; // our fun easy ordered set. 
    string name; // a name to read in 
    unsigned int nameCounter = 0; // a counter 

    // loop until we have 4 correct names. 
    while (nameCounter < 4) { 
     cout<<"Enter "<<nameCounter+1<<" name"<<endl; 
     getline(cin,name); 
     // Check that when they enter it into the set that it is actually inserted. 
     // Here we are being clever because "insert" returns a tuple with a bool 
     // to tell us if we put it in correctly. 
     if (!names.insert(name).second) { 
      cout << "That was not unique!" << endl; 
     } else { 
      nameCounter++; 
     } 
    } 

    // Now we can loop through the names which is already sorted for us! 
    for (auto listName : names) { 
      cout << listName << " "; 
    } 
    cout << endl; 
} 

Не так-то просто !? Почти всегда лучше использовать библиотеку std, чем делать что-то свое!

Настоящий жилой фонд example.

+0

Мне разрешено использовать только массивы, извините за то, что не сказал этого раньше, теперь не могу редактировать. – banananos

Смежные вопросы