當前位置:首頁 » 編程語言 » 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);
}

熱點內容
阿里雲伺服器託管破解 發布:2025-02-04 12:47:43 瀏覽:255
汽車都有什麼配置 發布:2025-02-04 12:42:51 瀏覽:455
ons解壓密碼 發布:2025-02-04 12:42:43 瀏覽:777
san存儲監控 發布:2025-02-04 12:42:06 瀏覽:41
apachemodpython 發布:2025-02-04 12:33:53 瀏覽:671
linuxphp安裝mysql 發布:2025-02-04 12:32:55 瀏覽:148
小米手機怎麼擴大配置 發布:2025-02-04 12:27:34 瀏覽:980
金x五毒桃花安卓版哪裡有下載 發布:2025-02-04 12:27:29 瀏覽:483
思快四編程 發布:2025-02-04 12:15:35 瀏覽:135
安卓手機哪個日歷好用無廣告 發布:2025-02-04 12:15:32 瀏覽:935