C или C++. Как сравнить две строки с указателями char*?

Я сортирую свой массив автомобилей двумя способами. один год, который показан ниже. и еще один сделать. Make is a char* как сравнить строки, когда у меня есть только указатели на них?

int i, j;
for(i=0; i<100; i++){
    for(j=0; j<100-i; j++){
        if(carArray[i]!=NULL && carArray[j]!= NULL && carArray[j+1]!=NULL){
            if(carArray[i]->year > carArray[j+1]->year){
                swap(carArray[j], carArray[j+1]);
            }
        }
    }
}

вышеуказанный метод работает для int (year). Как я могу заставить его работать для указателей char?

8 ответов


в значительной степени один, путь позвонить strcmp. Если ваши строки (по какой-то странной причине) не завершены нулем, вы должны использовать strncmp вместо.

однако в C++ вы действительно не должны манипулировать строками в массивах символов, если вы можете разумно избежать этого. Использовать std::string вместо.


Я думаю, вам нужно использовать функцию strcmp ().


убедитесь, что char * не равен null, и если вы хотите, найдите функцию stricmp() для сравнения без учета регистра. В противном случае используйте strcmp().

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


В C его функция strcmp (), как уже говорилось. В C++ вы можете использовать функцию compare ().

C:

 char str1[10] = "one";
 char str2[10] = "two";

 if (strcmp(s, t) != 0) // if they are equal compare return 0

C++

 string str1 ("one");
 string str2 ("two");
 if (str1.compare(str2) != 0) // if they are equal compare return 0

Я, конечно, предполагаю, что здесь у вас есть char * для автомобиля делает

int i, j;
for(i=0; i<100; i++){
    for(j=0; j<100-i; j++){
        if(carArray[i]!=NULL && carArray[j]!= NULL && carArray[j+1]!=NULL){
            if(strcmp(carArray[i]->make, carArray[j+1]->make) == 0)
            {
                //Do whatever here
            }
        }
    }
}

вы хотите сравнить с 0, потому что strcmp вернет 0, если нет разницы между двумя строками.
strcmp принимает два const char *.
http://www.cplusplus.com/reference/clibrary/cstring/strcmp/


когда вам нужно сравнить два Чара указатели в частности, вы можете сравнить их обычным способом: с помощью операторов сравнения <, >, == etc.

вопрос в случае THS является то, что вы не нужно сравнить два char указатели. Однако вам нужно сравнить две строки в стиле C эти указатели char указывают на. Чтобы сравнить строки c-стиля, вы должны использовать стандартный strcmp функция.

сверху, подход к обработке нулевых элементов в вашем алгоритме сортировки, похоже,не имеет никакого смысла. Представьте входной массив, содержащий чередующиеся указатели null и ненулевые указатели. Очевидно, что ваш алгоритм сортировки никогда ничего не сортирует, так как условие в вашем if никогда не будет правдой. Вам нужно пересмотреть свою обработку нулевых элементов. Конечно, прежде всего, вы должны решить, что делать с их. Игнорировать и оставить на месте? Нажать на один конец массива? Мой еще?


strcmp () поможет вам сравнить два символа* http://www.cplusplus.com/reference/cstring/strcmp/?kw=strcmp


вы действительно должны использовать qsort (в C,#include <stdlib.h>) или std::sort (на C++, #include <algorithm>) вместо пузыря вроде этого. Если это C++ , и вы принимаете совет @T. E. D. использовать std::string вместо необработанных строк C вам даже не нужно указывать сравнение, потому что < оператор будет использован и сделает правильную вещь.