【学习日志】2022.09.02 (C++)strcmp和stricmp、strcmpi三者之间的区别、C语言判断文件后缀名、ZENO Audio Update、TEN MINUTES PHYSICS

(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

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值