[C语言有没有可以计算出字符串中相同字符的个数的函数]//计算字符串中相同字符的个数 #include "stdio.h" #include "string.h" int count_str_same(char * p,char ch); int main() { int same_ch; char a[100]; char c; printf("请输...+阅读
#include
#include
#include
int test(char * str)
{
char *p = str;
char *q;
char *k;
int *tmp;
int num = 0;
//找一个字符存储一个字符
tmp = (int *)calloc(strlen(str),sizeof(int));
//每个字符都查找一遍
while(*p!='\0')
{
//从被查找的字符*p后面开始查找
q = p + 1;
//清0一下计数
num = 0;
while(*q!='\0')
{
//q开始查找*p
//并注意后面是不是还有等于*p的字符
//例如12313212
//最长字符串应该是1231231
if((k=strchr(q,*p))!=NULL)
{
//增加计数
num =k - q +2 ;
//再次查找
q = k + 1;
}else
{
break;
}
}
//保存找到的最长的字符数
tmp[p-str] = num;
//继续找一下一个
p++;
}
num = 0;
//找到最大的计数
for(int i = 0;i { if(num < tmp[i]) num = tmp[i]; } free(tmp); return num; } int main() { printf("[%d]\n",test("881291344513334123")); return 0; } //求使用最长子串使用LCS算法char* LCS(char left[],char right[]) { //获取左子串的长度,获取右子串的长度 int lenLeft=strlen(left),lenRight=strlen(right),k; //注意这里要写成char型,而不是int型,否则输入整型数据时会产生错误。 //矩阵c纪录两串的匹配情况 char*c=malloc(lenRight),*p; //int c[M][M]={0};//当将c申明为一个二维数组时 int start,end,len,i,j;//start表明最长公共子串的起始点,end表明最长公共子串的终止点 end=len=0;//len表示最长公共子串的长度 for(i=0; i=0; j--) { if(left[i] == right[j])//元素相等时 { if(i==0||j==0) c[j]=1;//c[i][j]=1; else { c[j]=c[j-1]+1;//c[i][j]=c[i-1][j-1]+1; } } else c[j] = 0; //c[i][j]=0; if(c[j] >len) //if (c[i][j]>len) { len=c[j]; //len=c[i][j]; end=j; } } } start=end-len+1; //数组p纪录最长公共子串 p =(char*)malloc(len+1); for(i=start; i public static String LC(String a,String b){ String max = ""; for(int i=0;i for(int j=0;j String tmp = a.substring(i, a.length()-j); if(b.indexOf(tmp)>=0 & tmp.length()>max.length()){ max = tmp; } } } return max; } 呀,已经有人回答了,而且还是一样的算法...呵呵 我来优化下吧 优化后的算法: public static String LC(String a, String b) { String min = b; String max = a; if (a.length() < b.length()) { min = a; max = b; } for (int i = 0; i < min.length(); i++) { for (int j = 0; j <= i; j++) { String tmp = min.substring(j, min.length() - i + j); System.out.println(tmp); if (max.indexOf(tmp) >= 0) { return tmp; } } } return ""; } 前面算法时间复杂度永远是O(n^2)优化后的算法只有最坏情况是O(n^2)且n是a,b中较小的那个 如果存在不同的等长字符串,会返回最前面的那个比如abcdef和abasdec会返回ab而不会返回de // 思路: 把字符串拆成单词的数组,再比较它们的长度,最后得到最长的。 #include#include#include#include#includeusing namespace std;const string TEXT("Apple$12pear watermelon $ # Banana"); // 原字符串 // 定义比较字符串长度的仿函数 class CompareStringLength{public: bool operator ()(const string &s1, const string &s2) { return s1.size() 以下为关联文档: 用C语言编写一个对称加密算法对字符串加密其实关键点就两个, 1、 如何进行对称位交换 (看我代码中的 SYMM_SWAP 宏) 2、 加密时先 对称交换,然后与key异或, 解密时则先与key异或,然后对称交换。 对此代码有什么不懂,可以bai... 急!高手请进请教c语言的可变参数函数如何求字符串长度要求出传入参数的总长度容易,代码附下(只做了%s%d%c的支持,其他可以自己做)。 但你申请了buf后,还要把这些变量拷到str中,需要考虑统计的时候把每个变量的长度和指针保存下来,申请b... c语言编程:倒序输出字符串:输入长度不超过100的字符串将其中代码供参考: #include "stdio.h" int main(void) { char InStr[100]; //保存输入字符串 char TmpStr[100]; //保存转换格式后的字符串 unsigned int i, j=0; unsigned int style... c语言字符串与字符串比较几个错误: 1.循环条件缺少了q[j]!='\0' 2.循环体开始的flag=1;是多余的.有这句的话,每次进入时都把flag变为1,那之前的flag=0不就不起作用了么 3.if(flag==0) { i=0; j=j-count+... C语言字符串的处理//最笨的方法,一个个判断 //当然查找子串有更好的算法,算法设计课上会学 char * mystrstr(char *s, char *t) { char *ps, *pt; for(; *s; ++s) { ps = s; pt = t; while(*ps+... 关于字符串编码 C语言计算 abc的这个字符串的长度 Linuxstring A type that describes a specialization of the template class basic_string with elements of type char as a string. wstring A type that describes a special... C语言字符串长度问题第一个字符串长度为9(\x44 表示D,\\表示\,\n表示回车,\102表示B) 0:a 1:D 2:\ 3: 4:b 5:c 6:d 7:B 8:a -------------------- 第二个字符串长度为7(\t 表示制表符,\xab表示一个... 确定字符长度的C语言语句字符长度的C语言 #include <string.h> strlen(str); int型范围 -1<<(sizeof(int)*8-1)到(1<<(sizeof(int)*8-1))-1) #include <stdio.h> #include <string.h> void main() { c... c语言中求字符串长度的程序编码#include<stdio.h> int strl(char *s) { int i=0; while(s[i])i++; return i; } main() { char t[80]; printf("输入字符串:"); gets(t); printf("长度%d\n",strl(t)); } 其实在stri...如何求两个字符串的最长子串
给定两个字符串求字符串间的最长子字符串
C字符串中的最长的字母子串