C++实用函数(用作学习的备忘录)

1.该功能isalnum()用于检查字符是否为字母数字。它返回非零值,如果字符是字母数字,则表示字母或数字,否则返回零。在“ ctype.h”头文件中声明。

这是isalnum()C语言的语法,int isalnum(int character);

2.tolower()函数在ctype.h头文件中定义。如果传递的字符是大写字母,则tolower()函数会将大写字母转换为小写字母。

用法:

int tolower(int ch);

参数:此方法采用强制参数ch,该参数是要转换为小写字母的字符。

返回值:此函数返回对应于ch的小写字符。

以下示例程序旨在说明C语言中的tolower()函数:

示例1:

// C program to demonstrate

// example of tolower() function.

#include

#include

int main()

{undefined

// Character to be converted to lowercase

char ch = 'G';

// convert ch to lowercase using toLower()

printf("%c in lowercase is represented as = %c", ch, tolower(ch));

return 0;

}

输出:

G in lowercase is represented as = g

3.setbuf(stdin,NULL);清空缓冲区函数

4.strlen(a)    //a为一个字符串数组,该函数返回的是字符串的长度。

描述
C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
声明
下面是 strlen() 函数的声明。

size_t strlen(const char *str)
1
参数
str – 要计算长度的字符串。
返回值
该函数返回字符串的长度。
 

5.strcmp(a,b)//a,b均为字符串,如果两字符串相等返回0,

函数原型: int strcmp(const char *string1,const char *string2)

所在库文件: #include<string.h>

参数: 以null结尾的字符串 const修饰防止字符串被修改,进行保护。

函数功能描述
当s1 < s2时,返回负值。
当s1 > s2时,返回正值。
当s1 == s2,返回0。
两个字符串的每个字符从左到右依此按照对应的ascii码值大小进行比较,若两字符对应的ascii码值相等,继续比较直到出现不同的字符或者遇到串尾标志符'\0'为止。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RNA二级结构预测是一个复杂的问题,需要深入的专业知识和算法,涉及到多个方面的知识,包括生物学、计算机科学、数学等等。以下提供一个粗略的实现思路,不一定是最优解,仅供参考。 C++ 编码: ```C++ #include<iostream> #include<cstring> using namespace std; #define MAXN 1000 //最大RNA序列长度 int f[MAXN][MAXN]; //备忘录数组 //计算i到j的最优得分 int dp(int i, int j, char s[]) { if(f[i][j] >= 0) return f[i][j]; //备忘录命中 if(i >= j) return 0; //i>=j时,没有配对,得分为0 int res = dp(i+1, j, s); //情况1:i不参与配对 for(int k = i+1; k <= j; ++k) { //情况2:i与k配对 if(s[i] == 'A' && s[k] == 'U' || s[i] == 'U' && s[k] == 'A' || s[i] == 'C' && s[k] == 'G' || s[i] == 'G' && s[k] == 'C') { res = max(res, dp(i+1, k-1, s) + dp(k+1, j, s) + 1); } } f[i][j] = res; //备忘录记录结果 return res; } //输出RNA序列的二级结构标记 void trace(int i, int j, char s[]) { if(i >= j) return; //i>=j时,没有配对 if(f[i][j] == f[i+1][j]) { //情况1:i不参与配对 trace(i+1, j, s); } else { //情况2:i与k配对 for(int k = i+1; k <= j; ++k) { if(s[i] == 'A' && s[k] == 'U' || s[i] == 'U' && s[k] == 'A' || s[i] == 'C' && s[k] == 'G' || s[i] == 'G' && s[k] == 'C') { if(f[i][j] == f[i+1][k-1] + f[k+1][j] + 1) { cout << "(" << i << "," << k << ")"; trace(i+1, k-1, s); trace(k+1, j, s); break; } } } } } int main() { char s[MAXN]; cin >> s; int n = strlen(s); memset(f, -1, sizeof(f)); //初始化备忘录为-1 cout << dp(0, n-1, s) << endl; //计算最优得分 trace(0, n-1, s); //输出二级结构标记 cout << endl; return 0; } ``` 输出标记函数: 输出RNA序列的二级结构标记,可以通过回溯备忘录数组中的最优决策路径来实现。具体实现如下: ```C++ //输出RNA序列的二级结构标记 void trace(int i, int j, char s[]) { if(i >= j) return; //i>=j时,没有配对 if(f[i][j] == f[i+1][j]) { //情况1:i不参与配对 trace(i+1, j, s); } else { //情况2:i与k配对 for(int k = i+1; k <= j; ++k) { if(s[i] == 'A' && s[k] == 'U' || s[i] == 'U' && s[k] == 'A' || s[i] == 'C' && s[k] == 'G' || s[i] == 'G' && s[k] == 'C') { if(f[i][j] == f[i+1][k-1] + f[k+1][j] + 1) { cout << "(" << i << "," << k << ")"; trace(i+1, k-1, s); trace(k+1, j, s); break; } } } } } ``` 备忘录: 为了避免重复计算,可以使用备忘录来记录已经计算过的子问题的结果。具体实现可以使用一个二维数组 f[i][j] 来记录子问题 dp(i,j) 的结果,其中 f[i][j] 表示 RNA 序列从第 i 个位置到第 j 个位置的最优得分。初始化备忘录为 -1,表示该位置还没有计算过。备忘录的具体实现如下: ```C++ #define MAXN 1000 //最大RNA序列长度 int f[MAXN][MAXN]; //备忘录数组 //计算i到j的最优得分 int dp(int i, int j, char s[]) { if(f[i][j] >= 0) return f[i][j]; //备忘录命中 if(i >= j) return 0; //i>=j时,没有配对,得分为0 int res = dp(i+1, j, s); //情况1:i不参与配对 for(int k = i+1; k <= j; ++k) { //情况2:i与k配对 if(s[i] == 'A' && s[k] == 'U' || s[i] == 'U' && s[k] == 'A' || s[i] == 'C' && s[k] == 'G' || s[i] == 'G' && s[k] == 'C') { res = max(res, dp(i+1, k-1, s) + dp(k+1, j, s) + 1); } } f[i][j] = res; //备忘录记录结果 return res; } ``` 以上是一个简单的RNA二级结构预测的实现思路,具体实现还需要针对问题进行进一步的优化和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值