C语言 在知道两段字符串的情况下截取中间的字符串
发布网友
发布时间:2022-05-12 14:52
我来回答
共4个回答
热心网友
时间:2023-10-11 00:34
先用strcat拼接好两个子串,然后再用left方式截取。
C语言中拼接字符串可以使用strcat函数。
1、strcat()函数 ,即string catenate的缩写
原型:extern char *strcat(char *dest,char *src);
用法:#include <string.h>
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
2、举例:
#include <stdio.h>
#include <string.h>
int main(){
char d[20]="字符串1"; //第一个字符串
char *s=" 字符串2"; //第二个字符串
strcat(d,s); //拼接两个字符串,结果保存在第一个字符串当中
printf("%s",d); //输出拼接结果:"字符串1字符串2"
getchar();
return 0;
}
3、c语言截取字符串方法:
#include <stdio.h>
#include <string.h>
/*从字符串的左边截取n个字符*/
char * left(char *dst,char *src, int n)
{
char *p = src;
char *q = dst;
int len = strlen(src);
if(n>len) n = len;
/*p += (len-n);*/ /*从右边第n个字符开始*/
while(n--) *(q++) = *(p++);
*(q++)='\0'; /*有必要吗?很有必要*/
return dst;
}
热心网友
时间:2023-10-11 00:35
#include <stdio.h>
#include <string.h>
char *picked(char str1[], char str2[], char separator) {
int i = 0,j = 0,flag = 0;
str2[0] = 0;
while(str1[i]) {
if(str1[i] == separator) {
flag = 1;
while(str1[i] == separator && str1[i]) ++i;
}
if(flag && str1[i]) {
while(str1[i] && str1[i] != separator)
str2[j++] = str1[i++];
str2[j] = 0;
return str2;
}
++i;
}
return str2;
}
int main() {
char s[] = "aaa_sdfg_sss";
char t[10],separator = '_';
printf("原串:%s\n",s);
printf("截取的结果:%s\n",picked(s,t,separator));
return 0;
}
热心网友
时间:2023-10-11 00:35
1.调用数据库函数,查c函数库
2.string s1,s2,s3;其中s1为总字符串,s2.s3也已知
char a[100]=s1手机不好写代码,就不写完了,利用下标记录成一个新字符串
3.迭代器,find();
if
热心网友
时间:2023-10-11 00:36
//////////////////////////////////////////////////////////////////////////////////////////////////
修改后的程序:
#include <stdio.h>
#include "string.h"
void substr(char str[], char front[], char rear[], char *pBuffer);
void main()
{
char str[30]="aaa_sdfg_sss";//初始化
char buffer[30];//缓存区
char * pBuffer = buffer;//要想在其它函数中修改主函数中的值,必须定义指针来实现;
int i = 0;
substr("aaa_sdfg_sss", "aaa_","_sss",pBuffer);
// substr("aaa_sdfg_sss", "aa","ss",pBuffer);
while (buffer[i] != '\0')
{
printf("%c",buffer[i]);
i++;
}
printf("\n");
}
void substr(char str[], char front[], char rear[], char * pBuffer)
{
int lstr ,lfront ,lrear;
int i = 0;
char * p = str;
lstr = strlen(str);
lfront = strlen(front);
lrear = strlen(rear);
for (p = str + lfront ; p < str +lstr -lrear ; p++)
pBuffer[i++] = *p;
pBuffer[i] = '\0';
}追问输入4个参数,分别是总文本,前面的文本,后面的文本,接收结果的缓存区
追答substr("aaa_sdfg_sss", "aaa_","_sss",pBuffer);
这个函数的四个参数:“aaa_sdfg_sss”是总文本
“aaa_”是前面的文本
“_sss”是后面的文本
pBuffer是指向缓存区的指针
void substr(char str[], char front[], char rear[], char * pBuffer)
str:总文本
front: 前面的文本,可以是总文本前部分的任意长度字符串
rear: 后面的文本,可以是总文本后部分的任意长度字符串
pBuffer:指向缓存区的指针,用来操作缓存区
没问题吧,你看看程序,运行注释的语句看看,理解一下。
和之前写的程序对比一下,理解实现的方法有何不同。
include
void substr(char * pstr, int m, int len);
void main()
{
char str[30]="aaa_sdfg_sss";//也可以通过函数输入,这里为了说明问题操作方法,直接初始化了
char * p = str;
int m,len;
printf("取子串的其实位置m,取子串长度len\n");
//scanf("%d%d",&m,&len);
//printf("其实位置%d,取子串长度%d",m,len);
substr(p, 4,4);
}
void substr(char * pstr, int m, int len)
{
char * p = pstr;
int k = 0;
char s[30];
for(p = pstr + m; p < pstr +m +len ; p++)
s[k++] = *p;
s[k] = '\0';
k=0;
while (s[k] != '\0')
{ printf("%c",s[k]);
k++;
}
printf("\n");
}