C или С++. Как сравнить две строки с заданными указателями char *?
Я сортирую свой массив автомобилей двумя способами. один год, который показан ниже. и еще один. Make - это 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 (год). Как я могу заставить его работать для указателей char?
Ответы
Ответ 1
В значительной степени один, способ - вызвать strcmp
. Если ваши строки (по какой-то странной причине) не завершены NUL, вы должны использовать strncmp
.
Однако в С++ вам действительно не следует манипулировать строками в массивах char, если вы можете разумно избежать этого. Вместо этого используйте std::string
.
Ответ 2
Я думаю, вам нужно использовать функцию strcmp().
Ответ 3
Убедитесь, что char * не является нулевым, и если хотите, найдите функцию stricmp() для сравнения без учета регистра. В противном случае используйте strcmp().
char * фактически представляет адрес памяти первого символа в каждой строке. Поэтому вы действительно не хотите сравнивать значения указателей, но содержимое, на которое они указывают.
Ответ 4
В C его функция strcmp(), как уже указано. В С++ вы можете использовать функцию compare().
C:
char str1[10] = "one";
char str2[10] = "two";
if (strcmp(s, t) != 0) // if they are equal compare return 0
С++
string str1 ("one");
string str2 ("two");
if (str1.compare(str2) != 0) // if they are equal compare return 0
Ответ 5
Я, конечно, предполагаю, что у вас есть 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/
Ответ 6
Вы действительно должны использовать qsort
(в C, #include <stdlib.h>
) или std::sort
(в С++, #include <algorithm>
) вместо такого типа пузырьков. Если это С++ и вы берете @T.E.D. советуем использовать std::string
вместо сырых строк C, вам даже не нужно указывать сравнение, потому что оператор <
будет использоваться и будет делать правильные вещи.
Ответ 7
Если вам нужно сравнить два указателя char, вы можете сравнить их обычным способом: используя операторы сравнения <
, >
, ==
и т.д.
Проблема в том, что вам не нужно сравнивать два указателя char. Однако вам нужно сравнить две строки C-стиля, на которые указывают указатели char. Чтобы сравнить строки C-стиля, вы должны использовать стандартную функцию strcmp
.
Помимо этого, подход к обработке нулевых элементов в вашем алгоритме сортировки, похоже, не имеет никакого смысла. Представьте входной массив, содержащий переменные нулевые указатели и ненулевые указатели. Очевидно, что ваш алгоритм сортировки никогда не будет сортировать, так как условие в вашем if
никогда не будет истинным. Вам нужно пересмотреть свою обработку нулевых элементов. Конечно, прежде всего, вы должны решить, что с ними делать. Игнорировать и оставить на месте? Нажимать на один конец массива? Что-то еще?
Ответ 8
strcmp() поможет вам сравнить два char *
http://www.cplusplus.com/reference/cstring/strcmp/?kw=strcmp