当前位置:首页 » 编程语言 » c语言在母字符串中

c语言在母字符串中

发布时间: 2022-06-30 16:49:26

A. c语言问题,统计子串在母串中出现的次数,要求用指针的方法

题目不够清楚啊字符串存储也需要用指针动态分配吗?还有比如对于母:ababa子:aba这样算几次呢?
charmother[20]="",children[10]="";
char*p1=NULL,*p2=NULL;
intcount=0;
scanf("%s",mother);
scanf("%s",children);
p1=mother;
p2=children;
while(*p1!=''){
if(strstr(p1,p2))
count++;
p1++;
}

B. C语言如何从字符串中读入字符

在scanf函数中,可以使用%c来读取一个字符,使用%s读取一个字符串, 但是读取字符串时不忽略空格,读字符串时忽略开始的空格,并且读到空格为止,因此只能读取一个单词,而不是整行字符串。

其实scanf函数也可完成这样的功能,而且还更强大。这里主要介绍一个参数,%[],这个参数的意义是读入一个字符集合。[]是个集合的标志,因此%[]特指读入此集合所限定的那些字符,比如%[A-Z]是输入大写字母,一旦遇到不在此集合的字符便停止。如果集合的第一个字符是"^",这说明读取不在"^"后面集合的字符,既遇到"^"后面集合的字符便停止。注意此时读入的字符串是可以含有空格的,而且会把开头的空格也读进来。

C. C语言:输入母字符串和子字符串,判断子字符串的位置

#include "stdio.h"

int main()
{
char a[81],b[81];
int i,j;
int lena,lenb;
printf("输入母字符串:");
gets(a);
printf("输入子字符串:");
gets(b);
for(i=0;a[i];i++);
for(j=0;b[j];j++);
lena=i;lenb=j;
for(i=0;i<=lena-lenb;i++)
{
for(j=0;a[j+i] && b[j] && a[j+i]==b[j];j++);
if(b[j]=='\0')
{
printf("%d\n",i+1);
return 1;
}
}
}

D. c语言查找字符串并报道其在字符串中的位置

/*这个程序我修改了一下,现在编译应该没有问题了*/
#include<stdio.h>
#include<string.h>
#define WRONG -1
void substring(char*);
int getnum(char *s,char *s1);
int main(){
char str[] = "TCGATTTCGATTT";
substring(str);
getch();
return 0;
}
void substring(char *p)
{
/*
** point 出现位置, frequency 连着出现次数, maxlen 字符串长度
*/
int point,frequency=1,maxlen=0,i,j=0,k=0,n,fr=0,max=1,l;
char *temp,*s;
temp = (char*)malloc(500);/*从母字符串提取出来,与其比较的字符串*/
s = (char*)malloc(500); /*找到后要输出的字符串*/
for(j=0;p[j];)
{ /*从第一个位置(A)开始一直到最后一个(T)确定每一个位置的最大匹配数*/
for(k=0;p[k+j];k++)
{
for(l=0;l<=k;l++)
temp[l] = p[l+j];
temp[k+1] = '\0';

for(fr=n=0;temp[n]==p[k+n+1+j] && (temp[n] || p[k+n+1+j]);)
{
n++;
if(!temp[n])fr=n; /*这里要注意以下,相邻必须完全匹配 条件是必须的*/
}

if(fr>maxlen)point = j,maxlen = fr;
if(fr==maxlen)frequency++;

}
/*每一个位置确定完以后,要输出这个字符串,并输出出现的位置,和他出现的频率*/
for(i=0; i<maxlen;i++)
s[i] = p[point++];
s[i] = '\0';

max = getnum(p+j,s)*maxlen;
if(max <= 0)
{
max = 1;
}
if(getnum(p+j,s)>1){
printf("%s ",s);
printf(" point = %d frequency=%d",j,getnum(p+j,s));
printf("\n");
}
/*摇把指针跳到已经找到的匹配字符串的后面*/
j+=max;
maxlen = 0;point=0;

}
}
/*这个函数确定找到的字符串,在母字符串中以次(相邻)出现的频率*/
int getnum(char *s,char *s1)
{
/*这个地方时计算的连着出现的次数*/
int len1=strlen(s),len2=strlen(s1),sum=0,i;
char *p = s1;
if(len2>len1)return(WRONG);

for(;*s==*s1 && (*s || *s1);)
{
s++,s1++;
if(!*s1)
{
sum++;
s1 = p;
}
}
if(sum>1)return sum;
return WRONG;
}

E. c语言中,如何在一个字符串中分别输出大写字母和小写字母。谢谢。

#include"stdio.h"

intmain()

{

chara[100]={0};

inti;

printf("请输入一个字符串:");

gets(a);

printf("你输入的字符串中大写字母为:");

for(i=0;a[i]!=0;i++)

if(a[i]>='A'&&a[i]<='Z')

printf("%c",a[i]);

printf(" ");

printf("你输入的字符串中小写字母为:");

for(i=0;a[i]!=0;i++)

if(a[i]>='a'&&a[i]<='z')

printf("%c",a[i]);

printf(" ");

return0;

}

F. C语言编程:输入母字符串、子字符串,输出子字符串中首字母在在母字符串中的位置,求高手解题……

#include <stdio.h>

int substrpos(char *s,char *t) { // 返回字符串s中包含子串t的首字母位置
char *p = s,*q,*pt;
int pos;
while(*p) {
q = t;
pos = p - s;
pt = p;
while(*q++ == *pt++);
if(*--q == '\0') return pos;
++p;
}
return -1;
}

int main () {
char s[] = "asjhfeasjdeasjdiaske",t[] = "sk";
int pos = substrpos(s,t);
if(pos >= 0) printf("%s 在 %s 中首字符位置是 : %d\n",t,s,pos);
else printf("%s 中不包含 %s。\n",s,t);
return 0;
}

G. 输入一个母字符串,找到第一个o出现的位置,c语言编程。运行结果如下。错哪里了如何修改

scanf("%c", str);
should be:
scanf("%s", str);

H. 输入一个母字符串,再输入一个目标字符串,返回目标字符串在母字符串中第一次出现的位置。用C语言编程。

在string.h里有个strstr方法是用来查找子字符串的,但一般不能用这个方法,通常的方法就是假定有一个字符串s,长度为a(长度可以由strlen求出或者自己算),子字符串s1长度为b,那么从s的第0个字符开始(i),到a-b+1为止,逐一用strncmp比较s1是否与s+i开始的长度为b的字符相等,如果相等,i就是当前的位置了


#include<stdio.h>
#include<string.h>
#define N 100
void main() {
char s[N],s1[N];
int i,a,b,k=-1;
gets(s);
gets(s1);
a=strlen(s);
b=strlen(s1);
for(i=0; i<a-b+1; i++) {
if((strncmp(s1,s+i,b))==0) {
k=i;
break;
}
}
if(k>-1)
printf("%d",k);
else printf("not found");
}

I. C语言:计算输入字母在字符串中有多少个

这个题目我做过练习题,附上我的代码。。。
#include <stdio.h>
#include <string.h>
void fun(char s[100],int a,int b,int c,int d) //计算函数
{
int i=0;
while(s[i]!=’\0’)
{
if(s[i]>’a’&&s[i]<’z’)
a++;
if(s[i]>’A’&&s[i]<’Z’)
b++;
if(s[i]>=0&&s[i]<=9)
c++;
if(s[i]==’ ‘)
d++;
i++;
}
main()
{
char s[100];
int a=0,b=0,c=0;
printf(“请输入字符串:”);
gets(s);
fun(s,a,b,c);
printf(“大写字母:%d个,小写字母:%d个,数字:%d个,空格:%d个\n”,a,b,c,d);
}

这是在WORD文档里写的,没编译,不知道对不对,但那个符号格式是不对的,用的都是很基础的数据。呃,我学的是VC。。。

J. 在一个母字符串中找到一个子字符串,c语言,为什么运行不出来错在哪里如何修改

方法是全部读出来到字符数组,然后替换修改后再全部写入到文件。
也可以使用以下这种方法:
读写方式打开文件,然后一个一个字符地读取,并进行关键字判定即d,a,t,a判定
当读取的字符为d时标记一下,下一个如果不是a则取消标记,依次判定完是否为data,如果是的话,移动到d处进行改写操作。。。
见如下replaceinfile();函数
#include <stdio.h>
#include <string.h>
void replaceinfile(const char *pfile,const char *repstr,const char *objstr);
void main()
{
replaceinfile("data.txt","_data","data");

}
void replaceinfile(const char *pfile,const char *repstr,const char *objstr)
{
int repcount=0;
FILE *fp,*fptmp=tmpfile();
int objstrlen=strlen(objstr);
if(fp=fopen(pfile,"r+"))
{
char c;
int flag=0;
while(c=fgetc(fp),c!=EOF)
{
for(int i=0;i<objstrlen;i++)
{
if(objstr[i]==c && i==flag)
{
flag++;
break;
}
}
if(i!=flag-1) flag=0;
fputc(c,fptmp);
if(flag==objstrlen)
{
fseek(fptmp,-objstrlen,SEEK_CUR);//
fputs(repstr,fptmp);
repcount++;
}
}
fseek(fptmp,0,SEEK_SET);
fseek(fp,0,SEEK_SET);
while(c=fgetc(fptmp),c!=EOF)
fputc(c,fp);
}
fclose(fp);
fclose(fptmp);
printf("文本\"%s\"替换成\"%s\",共替换了%d处!\n",objstr,repstr,repcount);
}

热点内容
oj编译器和本地编译器不一样 发布:2025-02-04 14:59:24 浏览:647
凤凰地下商城wifi密码是多少 发布:2025-02-04 14:42:00 浏览:903
哈希查找算法 发布:2025-02-04 14:40:36 浏览:467
云服务器显示黑洞 发布:2025-02-04 14:29:05 浏览:300
redhatlinux教程 发布:2025-02-04 14:24:48 浏览:831
nvidia缓存清理吗 发布:2025-02-04 14:16:55 浏览:307
笔记本电脑如何设置锁屏密码 发布:2025-02-04 13:54:42 浏览:163
构成c语言程序的基本单位 发布:2025-02-04 13:49:53 浏览:990
如何修改已经更改的密码 发布:2025-02-04 13:38:38 浏览:776
唐dm2021买哪个配置划算 发布:2025-02-04 13:38:38 浏览:628