(C++)strcmp和stricmp、strcmpi三者之间的区别
(strcmpi在Windows C标准库实现,但不在GNU C标准库实现)
#include <string.h>
#include <stdio.h>
原型:extern int strcmp(const void *s1, const void *s2);
用法:#include <string.h>
功能:比较字符串s1和s2是否相同,区分大小写。
说明:如果s1=s2则返回零,否则返回非零值。
原型:extern int stricmp(char *s1,char * s2);
用法:#include <string.h>
功能:比较字符串s1和s2,但不区分字母的大小写。
说明:strcmpi是到stricmp的宏定义,实际未提供此函数。
当s1<s2时,返回值<0
当s1=s2时,返回值=0
当s1>s2时,返回值>0
//举例:
void main()
{
char *str1="I am OldWolf";
char *str2="I am Oldwolf";
int cmp;
printf("原字符串分别为:\n%s\n%s\n\n",str1,str2);
cmp=strcmp(str1,str2);
if (cmp!=0)
printf("strcmp比较字符串不相同!\n");
else
printf("strcmp比较字符串相同!\n");
cmp=stricmp(str1,str2);
if (cmp!=0)
printf("stricmp比较字符串不相同!\n");
else
printf("stricmp比较字符串相同!\n");
cmp=strcmpi(str1,str2);
if (cmp!=0)
printf("strcmpi比较字符串不相同!\n");
else
printf("strcmpi比较字符串相同!\n");
}
C语言判断文件后缀名
示例
#include <stdio.h>
#include <string.h> // strrchr()函数
int main(void)
{
char sFilenname[20]; //创建chr型数组且分配内存
const char *pFile;
printf("请输入文件名称:");
scanf("%s", sFilenname);
pFile = strrchr(sFilenname, '.'); // 判断输入的文件名最后输出.的位置
if (pFile != NULL)
{ // 输入不为空
if (strcmpi(pFile, ".exe") == 0)
{ // 判断.exe文件
printf("exe文件!");
return 0;
}
else if (strcmpi(pFile, ".txt") == 0)
{ // 判断.txt文件
printf("txt文件");
return 0;
}
}
printf("非文件格式");
return 0;
}
ZENO_Audio 判断wav mp3
(strcmpi在Windows C标准库实现,但不在GNU C标准库实现,小编在Ubuntu里开发的,只能用tolower + strrchr实现了)
struct ReadAudioFile : zeno::INode {
virtual void apply() override {
auto path = get_input<StringObject>("path")->get(); // std::string
auto lower_path = path;
transform(lower_path.begin(), lower_path.end(), lower_path.begin(), ::tolower);
zeno::log_info("{} -> {}", path, lower_path);
bool isWave = false;
auto *pFile = strrchr(path.c_str(),'.');
if(pFile !=NULL) {
if (strcmp(pFile, ".wav") == 0) {
zeno::log_info("is wave");
auto result = zeno::readWav(path);
set_output("wave", result);
} else if (strcmp(pFile, ".mp3") == 0) {
zeno::log_info("is mp3");
auto result = zeno::readMp3(path);
set_output("wave", result);
}
}
}
};
strrchr()用法
#include <stdio.h>
#include <string.h>
int main ()
{
int len;
const char str[] = "https://www.runoob.com";
const char ch = '.';
char *ret;
ret = strrchr(str, ch);
printf("|%c| 之后的字符串是 - |%s|\n", ch, ret);
return(0);
}
c_str()用法
//标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组
//主要介绍c_str
//c_str():生成一个const char*指针,指向以空字符终止的数组。
//这个数组应该是string类内部的数组
#include <iostream>
//需要包含cstring的字符串
#include <cstring>
using namespace std;
int main()
{
//更好的方法是将string数组中的内容复制出来 所以会用到strcpy()这个函数
char *c = new char[20];
string s = "1234";
// c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。
strcpy(c,s.c_str());
cout<<c<<endl;
s = "abcd";
cout<<c<<endl;
}
转换字符串的大小写
可以用transform函数转换字符串的大小写。
头文件:#include<algorithm>‘’
函数原型之类的没有研究,只看了他的用法
transform(str.begin(), str.end(), str.begin(), ::tolower);//将str字符串中的大写转换为小写,保存在str中
transform(str.begin(), str.end(), str.begin(), ::toupper);//小写->大写
transform(str.begin(), str.end(), str.begin(), exchange);//大小写切换
示例
#include<iostream>
#include<algorithm>
using namespace std;
class Solution {
public:
bool isPalindrome(string s) {
if(s.size() == 0)return true;
size_t left = 0;
size_t right = s.size() - 1;
transform(s.begin(),s.end(),s.begin(),::tolower);//将字符串的大写改为小写
while(left < right)
{
if(!((s[left] >= 'a' && s[left] <= 'z')
||(s[left] >= '0' && s[left] <= '9')))
{
left++;
continue;
}
if(!((s[right] >= 'a' && s[right] <= 'z')
||(s[right] >= '0' && s[right] <= '9')))
{
right--;
continue;
}
if(s[left] != s[right])
{
return false;
}
left++;
right--;
}
return true;
}
};
int main()
{
string str;
Solution s1;
while(getline(cin, str))
{
cout << s1.isPalindrome(str)<<endl;
}
return 0;
}
《TEN MINUTES PHYSICS》
Ten Minute Physics (matthias-research.github.io)
01 - Introduction to 2d web browser physics |