c語言——用指針解決字元串問題——輸出一個字元串的子串

#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"


voidsubString(char*p,intstart,intlen);
voidsubstring(char*p,intstart,intlen)
{
inti;
printf("取出的子串是:");
for(i=start;i<start+len;i++)
printf("%c",*(p+i));
printf(" ");
}
intmain()
{
intn,i=0,start,len;
printf("請輸入字元的個數:n,起始位:start,子串長度:n ");
scanf("%d%d%d",&n,&start,&len);
printf("n=%d,start=%d,len=%d ",n,start,len);
printf("請輸入字元串:");
char*pstr=(char*)malloc(sizeof(char)*(n+1));
if(NULL==pstr)
{
printf("內存分配失敗");
exit(-1);
}
else
{
for(i=0;i<=n;i++)
*(pstr+i)=getchar();
*(pstr+i)='';
}

printf(" ");

if(start>n||len>n)
printf("輸入參數不合適 ");
else
{
substring(pstr,start,len);
}

return0;

}


Ⅱ C語言判斷一個字元串是否是另一個字元串的子串

1、首先,定義兩個整型變數,保存判斷的數和同構串計數。

Ⅲ 用C語言實現輸入一字元串後輸出該字元串所有子串

剛好是我剛做過得....#include <stdio.h>
#include <stdlib.h>

char *substr(char *s,int pos,int n,char *t) { // 返回字元串s中從pos開始的n個字元
int i = 0;
while((i < n) && (*s)) {
t[i] = s[pos + i];
++i;
}
t[i] = '\0';
return t;
}

int main() {
char t[20],s[] = "the c programing language!";
printf("t = %s\n",substr(s,6,10,t));
system("pause");
return 0;
} 贊同0| 評論

Ⅳ 怎麼用C語言實現輸出某個字元串的所有子串

三重循環即可

voidprint_all_sub(char*s)
{
inti,j,k;
for(i=0;s[i];i++)//遍歷每個元素。
{
for(k=1;s[k+i-1];k++)//計算以s[i]開始長度為k的子串專屬
{
for(j=0;j<k;j++)//輸出子串。
{
printf("%c",s[i+j]);
}
printf(" ");
}
}
}

Ⅳ 【C語言】如何把字元串a中的子串b用串c代替

這個首先是字元串匹配,就是先在a中找到字串b,標記未知,然後替換。這個字元串匹配演算法有很多,最原始的就是完全匹配,高效的可以考慮KMP演算法。

Ⅵ C語言程序,判斷一個字元串是否是另一個字元串的子串,如是則輸出第一次出現的位置

#include<stdio.h>
#include<string.h>
intiszstr(char*str,char*zstr);//zstr是str的子串返回出現的位置下標,否則返回-1
intmain()
{
intrenum;
charstr[100],zstr[100];
while(1)
{
str[0]=zstr[0]=0;
printf("輸入母串:");
scanf("%s",str);
printf("輸入可能的子串:");
scanf("%s",zstr);
renum=iszstr(str,zstr);
if(renum<0)
printf("不是子串! ");
else
printf("是子串,起始位置在下標%d處! ",renum);
}

return0;
}
intiszstr(char*str,char*zstr)
{
char*p1=str,*p2=NULL,*pSave=NULL,flag;
while(*p1)
{
if(*p1==zstr[0]&&strlen(p1)>=strlen(zstr))//先找到對應的首字元位置
{
pSave=p1;
p2=&zstr[0];
flag=1;
while(*p2)
{
if(*p1!=*p2)
{
flag=0;
break;
}
p1++;
p2++;
}
if(flag==1)
{
returnpSave-&str[0];
}
else
p1=pSave;
}
p1++;
}
return-1;
}

Ⅶ C語言中如何用一個字元串替換一個主串中的子串

參考以下代碼
#include <string.h>
//oldstr原字元串, newstr新字元串, oldsubstr原字元串中要替換的子串, newsubstr新字元串中替換後的新子串
void replace(char *oldstr, char *newstr, char *oldsubstr, char *newsubstr)
{
int i, j;
int nLen = strlen(oldstr);
int nLenSub = strlen(oldsubstr);
for(i=0, j=0; i<nLen;)
{
if(0 == strncmp(oldstr+i, oldsubstr, nLenSub))
{
strcat(newstr+j, newsubstr);
j += strlen(newsubstr);
i += nLenSub;
}
else
{
newstr[j++] = oldstr[i++];
}
}
}

Ⅷ C語言中判斷一個字元串是否為另一字元串的子串

你的if語句後面再加個if語句判斷f是否等於1,等於1就不用循環了。你沒判斷,後面的字元又把你的1改回0了。修改後代碼如下

#include<stdio.h>
#include<string.h>
main(){
chara[100],b[100];
inti,j,f=0;
gets(a);//cde
gets(b);//aabbcdefghbcd
for(i=0;i<strlen(b);i++){
if(b[i]==a[0]){
for(j=1;j<strlen(a);j++){
if(a[j]==b[i+j]){
f=1;
continue;
}else{
f=0;
break;
}
}
}
if(f==1){
break;
}
}
if(f==1)
printf("YES");
else
printf("NO");
}

使用庫函數strstr

#include<stdio.h>
#include<string.h>
main(){
chara[100],b[100];
gets(a);
gets(b);
if(strstr(b,a)!=NULL){//第2個參數第1個參數的子串
printf("YES");
}else{
printf("NO");
}
}

Ⅸ c語言,取字元串的子串

//vc++ 6.0下運行通過
#include <stdio.h>
#include <stdlib.h>
char *subs(char *s,int n,int m)
{
char *p;
int i=0;
p=s;
while(*p++ != '\0') //NULL是void *型
{
i++;
}
if(n<0||m<0||m<n||m>i)
{
printf("Substring invidal !\n");
exit (0);
}
p=s+n;
*(p+m+1)='\0';//必須'\0',printf函數讀到'\0'停止;
return(p);
}

int main(void)
{
char s1[]="The c programing language!";// char *常量
system("cls");
printf("%s\n",subs(s1,5,16));
}

Ⅹ c語言求一個字元串里有幾個子串

#include
#include
int substring(char *str,char *str1);//函數原型
int main(void)
{
char str[64]={0};
char str1[16]={0};
int i,j,x;
printf("please put the string\n");
gets(str);//輸入的原字元串
puts(str);
printf("\n");
printf("please put the string1 \n");
gets(str1);//輸入的字元串中的子串
puts(str1);
printf("\n");
i=strlen(str);//原字元串長度
j=strlen(str1);//子串長度
printf("the string lenth is %d\n",i);
printf("the string lenth is %d\n",j);
x=substring(str,str1);
printf("then anwser is %d\n",x);
return 0;
}
int substring(char *str,char *str1)
{
int x=0;
char *p;//任意附個初始值
do{
p=strstr(str,str1);//1.p指針指向strstr的返回值。.再一次循環到 這里函數的參數發生變化,p重新指向strstr返回值,如此循環。
if(p != NULL) {
str=p+1;//2.str同樣指向strstr返回值p的下一個地址。
x=x+1;
}
}while(p!=NULL);
return x;
}

另一種方法,不用庫函數來實現,來自他人。。。
int substring1(char *str,char * str1,int n,int m)
{
int i,j=0,k;
int x=0;
for(i=0;i<=n-m;i++) {
k = i;
while (1) {
if (str[k] != str1[j] ) {
j=0;
break;
} else if (str1[j+1] == '\0') {
x++;
j=0;
break;
} else {
k++;
j++;
}
}
}
return x;
}