derreter
Pôster original- 4 de dezembro de 2006
- Katy, Texas
- 8 de junho de 2007
(Além disso, agora estou em uma missão para encontrá-lo ...)
Obrigado, todd T
derreter
Pôster original- 4 de dezembro de 2006
- Katy, Texas
- 8 de junho de 2007
eu vejo
- 25 de outubro de 2004
- 8 de junho de 2007
Se você não quiser ou precisar se preocupar com as localidades:
_stricmp (str1.c_str (), str2.c_str ())
É a solução mais simples (também bastante eficiente).
As localidades complicam um pouco as coisas (bem, são realmente as deficiências da biblioteca padrão que tornam isso tão complicado).
Deixe-me ver se consigo encontrar um link de algo que lida com locais ...
aqui está um: http://lafstern.org/matt/col2_new.pdf
Não sei se ele realmente sabe do que está falando, mas parece que sim. Ele continua um pouco sobre isso para que você possa entender o problema, mas você pode pular para o final e verificar o último bloco de código para sua melhor solução. T
derreter
Pôster original- 4 de dezembro de 2006
- Katy, Texas
- 9 de junho de 2007
Obrigado pela confirmação - fico feliz em ver que eu não estava apenas perdendo isso.
Todd
Código:
#include #include using namespace std ; bool case_insensitive_compare( string a, string b) { char char1, char2, blank = ' ' ; int len1 = a.length() ; int len2 = b.length() ; for (int i = 0 ; i input ; result = case_insensitive_compare(input, hello) ; std::cout << 'Result of compare of ' << input << ' to ' << hello << ' is ' << (result ? 'true' : 'false' ) << endl ; return 0; }
T derreter
Pôster original- 4 de dezembro de 2006
- Katy, Texas
- 10 de junho de 2007
iSee disse: Se você não quiser ou precisar se preocupar com as localidades, então:
_stricmp (str1.c_str (), str2.c_str ())
É a solução mais simples (também bastante eficiente).
Ok eu desisto. De onde você veio _stricmp ?
Todd NO
Wittegijt
- 18 de fevereiro de 2007
- Eindhoven
- 11 de junho de 2007
toddburch disse: OK, desisto. De onde você veio _stricmp ?
Todd
É uma coisa do Windows. Bibliotecas Unix usam strcasecmp, está em.
Wittegijt.
eu vejo
- 25 de outubro de 2004
- 11 de junho de 2007
toddburch disse: OK, desisto. De onde você veio _stricmp ?
Todd
OK, desculpe por jogar isso aí.
Achei que fosse parte da biblioteca C padrão, mas não é. Ele simplesmente aparece, não oficialmente, com nomes diferentes, em várias implementações da biblioteca C. Portanto, uma comparação sem distinção entre maiúsculas e minúsculas também não é uma parte oficial da biblioteca C oficial. Nossa. Parece uma omissão tão grande. No VS, é _stricmp () ou stricmp (), no CodeWarrior para Mac é stricmp () ou strcasecmp () e no OS X 10.4 / Xcode é strcasecmp ().
Venha para pensar sobre isso, o sublinhado principal deveria ter me dado a dica.
Eu acho que se você deseja estar em conformidade com o padrão C, você deve implementar o seu próprio usando tolower () (ou toupper ()) em um loop.
Vamos ver uma primeira passagem pode ser (isso está fora do topo da minha cabeça, NÃO o código testado):
Código:
#include ... int mystricmp(const char* str1, const char* str2) { if (str1 == str2) return 0; else if (str1 == NULL) return -1; else if (str2 == NULL) return 1; else { while (tolower(*str1) == tolower(*str2) && *str1 != 0 && *str2 != 0) { ++str1; ++str2; } if (*str1 *str2) return 1; else return 0; } }
De qualquer forma, novamente, desculpe pelo conselho ruim. Acho que não tenho feito muita codificação C / C ++ no Mac OS X onde queria evitar a API do sistema operacional (CFString, etc.) desde os dias do CodeWarrior ... T
derreter
Pôster original- 4 de dezembro de 2006
- Katy, Texas
- 11 de junho de 2007
OK, agora para strcasecmp () . O site cppreference.com que estou usando parece ser apenas C / C ++ padrão. Eu pesquisei por um site de referência específico do Mac OS X XCode e não encontrei um. O que é um bom site de referência do Mac OS X C ++? Ou existe uma referência de C ++ embutida na ajuda do XCode em algum lugar e eu simplesmente não a encontrei? Ou, na falta de tudo isso, há algum no Apple Development Center que eu também perdi?
Tão grande quanto os diskimages do XCode são que eu baixa e instalo quando solicitado, certamente há uma referência de linguagem lá em alguém - quer dizer, o material Java que baixei inicialmente era ENORME.
Todd
Krevnik
- 8 de setembro de 2003
- 11 de junho de 2007
toddburch disse: OK, agora para strcasecmp () . O site cppreference.com que estou usando parece ser apenas C / C ++ padrão. Eu pesquisei por um site de referência específico do Mac OS X XCode e não encontrei um. O que é um bom site de referência do Mac OS X C ++? Ou existe uma referência de C ++ embutida na ajuda do XCode em algum lugar e eu simplesmente não a encontrei? Ou, na falta de tudo isso, há algum no Apple Development Center que eu também perdi?
Ele está lá, mas não acho que vá além das funções C que estão na camada POSIX, apenas todas as adições da Apple ao POSIX. Você pode usar o terminal para acessar as páginas do manual sobre algumas dessas funções. 'man strcasecmp' o levará direto para a página que fala sobre essa função e descreverá como usá-la.
eu vejo
- 25 de outubro de 2004
- 11 de junho de 2007
http://developer.apple.com/documentation/Darwin/Reference/ManPages/index.html
que é um índice para tudo nas páginas de manual do OS X, incluindo as funções da biblioteca C.
A biblioteca de referência do Xcode acessa páginas do manual, além de outros recursos, portanto, todos estão disponíveis por meio do Xcode (eu uso 'Localizar texto selecionado na referência da API' o tempo todo).
Parece que as funções C estão na seção 3. Parece que a documentação de cada função contém uma seção 'padrão' ou 'histórico' que fornece algumas informações sobre o padrão com o qual a função está em conformidade. Aparentemente strcasecmp () foi movido de 'string.h' para 'strings.h' por motivos de conformidade. Não tenho certeza de como isso o torna compatível. Eu acho que isso significa que funções não padrão não devem aparecer em string.h, então eles o moveram para um arquivo de cabeçalho diferente. T
derreter
Pôster original- 4 de dezembro de 2006
- Katy, Texas
- 11 de junho de 2007
Publicações Populares