求教字符串截取拼接的问题

[复制链接]
查看11 | 回复10 | 2021-1-27 06:52:09 | 显示全部楼层 |阅读模式
指针p指向一个字符串,这个指针在循环里面每次指向字符串内容不同但是每个里面都有ringhtnum,每个ringhtnum后面都有数字(每次的数字不同),比如其中一个字符串内容是“545ee,rightnum:12345”,现在我需要把ringhtnum后面的12345取出来使用两次变成"newnumber12345,12345"的格式变成新的字符串存放(这里我不知道是应该覆盖指针p的内容还是再申请一个指针存放新数据),应该如何写?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:52:09 | 显示全部楼层
把“545ee,rightnum:12345”变成"newnumber12345,12345"?
用中间变量方便些,即把从原内存中拷贝到另一个内存格式化好后再拷回去。
如果不用中间变量就用memmove
回复

使用道具 举报

千问 | 2021-1-27 06:52:09 | 显示全部楼层
引用1楼leiour的回复:把“545ee,rightnum:12345”变成"newnumber12345,12345"?
用中间变量方便些,即把从原内存中拷贝到另一个内存格式化好后再拷回去。
如果不用中间变量就用memmove

用strcpystrcat这类的实现不了吗
回复

使用道具 举报

千问 | 2021-1-27 06:52:09 | 显示全部楼层
引用2楼blueskysqq的回复:Quote: 引用1楼leiour的回复:
把“545ee,rightnum:12345”变成"newnumber12345,12345"?
用中间变量方便些,即把从原内存中拷贝到另一个内存格式化好后再拷回去。
如果不用中间变量就用memmove

用strcpystrcat这类的实现不了吗

memcpy,memmove可以控制你拷贝的长度,strcpy是整个字符串拷贝,碰到\0才结束
回复

使用道具 举报

千问 | 2021-1-27 06:52:09 | 显示全部楼层
作为一个C程序员,对
scanf,sscanf,fscanf
printf,sprintf,fprintf
这类函数的用法,还是要做到“拳不离手,曲不离口”的。
//指针p指向一个字符串,这个指针在循环里面每次指向字符串内容不同但是每个里面都有ringhtnum,
//每个ringhtnum后面都有数字(每次的数字不同),比如其中一个字符串内容是“545ee,rightnum:12345”,
//现在我需要把ringhtnum后面的12345取出来使用两次变成"newnumber12345,12345"的格式
//变成新的字符串存放(这里我不知道是应该覆盖指针p的内容还是再申请一个指针存放新数据),应该如何写?
#include
#include
chars[100]="545ee,rightnum:12345";
chart[100];
char*p,*q;
intd;
intmain(){
p=(char*)s;
q=strstr(p,"rightnum:");
if(q){
if(1==sscanf(q+strlen("rightnum:"),"%d",&d)){
sprintf(t,"newnumber%d,%d",d,d);
printf("t==[%s]\n",t);
}
}
return0;
}
//t==[newnumber12345,12345]
//

回复

使用道具 举报

千问 | 2021-1-27 06:52:09 | 显示全部楼层
引用4楼zhao4zhong1的回复:作为一个C程序员,对
scanf,sscanf,fscanf
printf,sprintf,fprintf
这类函数的用法,还是要做到“拳不离手,曲不离口”的。
//指针p指向一个字符串,这个指针在循环里面每次指向字符串内容不同但是每个里面都有ringhtnum,
//每个ringhtnum后面都有数字(每次的数字不同),比如其中一个字符串内容是“545ee,rightnum:12345”,
//现在我需要把ringhtnum后面的12345取出来使用两次变成"newnumber12345,12345"的格式
//变成新的字符串存放(这里我不知道是应该覆盖指针p的内容还是再申请一个指针存放新数据),应该如何写?
#include
#include
chars[100]="545ee,rightnum:12345";
chart[100];
char*p,*q;
intd;
intmain(){
p=(char*)s;
q=strstr(p,"rightnum:");
if(q){
if(1==sscanf(q+strlen("rightnum:"),"%d",&d)){
sprintf(t,"newnumber%d,%d",d,d);
printf("t==[%s]\n",t);
}
}
return0;
}
//t==[newnumber12345,12345]
//

老师,这里p=(char*)s;不用强制类型转换就可以吗?
回复

使用道具 举报

千问 | 2021-1-27 06:52:09 | 显示全部楼层
引用5楼cxs812747475的回复:Quote: 引用4楼zhao4zhong1的回复:
作为一个C程序员,对
scanf,sscanf,fscanf
printf,sprintf,fprintf
这类函数的用法,还是要做到“拳不离手,曲不离口”的。
//指针p指向一个字符串,这个指针在循环里面每次指向字符串内容不同但是每个里面都有ringhtnum,
//每个ringhtnum后面都有数字(每次的数字不同),比如其中一个字符串内容是“545ee,rightnum:12345”,
//现在我需要把ringhtnum后面的12345取出来使用两次变成"newnumber12345,12345"的格式
//变成新的字符串存放(这里我不知道是应该覆盖指针p的内容还是再申请一个指针存放新数据),应该如何写?
#include
#include
chars[100]="545ee,rightnum:12345";
chart[100];
char*p,*q;
intd;
intmain(){
p=(char*)s;
q=strstr(p,"rightnum:");
if(q){
if(1==sscanf(q+strlen("rightnum:"),"%d",&d)){
sprintf(t,"newnumber%d,%d",d,d);
printf("t==[%s]\n",t);
}
}
return0;
}
//t==[newnumber12345,12345]
//

老师,这里p=(char*)s;不用强制类型转换就可以吗?
这里不都是一个类型吗还用转换吗直接p=s不行吗
回复

使用道具 举报

千问 | 2021-1-27 06:52:09 | 显示全部楼层
源代码文件后缀使用.c和使用.cpp对变量类型是否一致的要求严格程度是不一样的。
回复

使用道具 举报

千问 | 2021-1-27 06:52:09 | 显示全部楼层
引用4楼zhao4zhong1的回复:作为一个C程序员,对
scanf,sscanf,fscanf
printf,sprintf,fprintf
这类函数的用法,还是要做到“拳不离手,曲不离口”的。
//指针p指向一个字符串,这个指针在循环里面每次指向字符串内容不同但是每个里面都有ringhtnum,
//每个ringhtnum后面都有数字(每次的数字不同),比如其中一个字符串内容是“545ee,rightnum:12345”,
//现在我需要把ringhtnum后面的12345取出来使用两次变成"newnumber12345,12345"的格式
//变成新的字符串存放(这里我不知道是应该覆盖指针p的内容还是再申请一个指针存放新数据),应该如何写?
#include
#include
chars[100]="545ee,rightnum:12345";
chart[100];
char*p,*q;
intd;
intmain(){
p=(char*)s;
q=strstr(p,"rightnum:");
if(q){
if(1==sscanf(q+strlen("rightnum:"),"%d",&d)){
sprintf(t,"newnumber%d,%d",d,d);
printf("t==[%s]\n",t);
}
}
return0;
}
//t==[newnumber12345,12345]
//

12345只是我随便写的数字这个数字还有可能是9位数或者10位数,用int存放肯定会溢出的,用字符串的话结尾会有\0也就是说会换行了,这个怎么解决呐

回复

使用道具 举报

千问 | 2021-1-27 06:52:09 | 显示全部楼层
//指针p指向一个字符串,这个指针在循环里面每次指向字符串内容不同但是每个里面都有ringhtnum,
//每个ringhtnum后面都有数字(每次的数字不同),比如其中一个字符串内容是“545ee,rightnum:12345”,
//现在我需要把ringhtnum后面的12345取出来使用两次变成"newnumber12345,12345"的格式
//变成新的字符串存放(这里我不知道是应该覆盖指针p的内容还是再申请一个指针存放新数据),应该如何写?
#include
#include
chars[100]="545ee,rightnum:1234567890123456789";
chart[100];
char*p,*q;
__int64d;
intmain(){
p=(char*)s;
q=strstr(p,"rightnum:");
if(q){
if(1==sscanf(q+strlen("rightnum:"),"%I64d",&d)){
sprintf(t,"newnumber%I64d,%I64d",d,d);
printf("t==[%s]\n",t);
}
}
return0;
}
//t==[newnumber1234567890123456789,1234567890123456789]
//

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行