社区
C语言
帖子详情
关于改变字符串的问题
askquestion2002
2003-04-14 06:03:33
想写一个函数
int CutByChar(char *pszIn,char c)
想要实现的功能
将c第一次在pszIn出现的位置前的所有字符及c去掉,保留
c之后的所有字符,并且将这样的改变结果保留到pszIn中。
问题
1 使用char *pszIn,这样在函数中改变pszIn,改变的结果是否会反映
到pszIn中?
2 如何改变pszIn的内容,使c之后的所有字符保存到pszIn中,并且速度
要快?
...全文
102
13
打赏
收藏
关于改变字符串的问题
想写一个函数 int CutByChar(char *pszIn,char c) 想要实现的功能 将c第一次在pszIn出现的位置前的所有字符及c去掉,保留 c之后的所有字符,并且将这样的改变结果保留到pszIn中。 问题 1 使用char *pszIn,这样在函数中改变pszIn,改变的结果是否会反映 到pszIn中? 2 如何改变pszIn的内容,使c之后的所有字符保存到pszIn中,并且速度 要快?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
messagebox
2003-04-14
打赏
举报
回复
//呵呵,不好意思,上面做的还是不对
int CutByChar(char *pszin, char c)
{
int i,t;
for(i=0; pszin[i] != c && pszin[i] != '\0'; i++)
;
t = i ; //t 为找到的c的下标
cout << t << endl ;
if(pszin[t] == '\0')
return 0 ;
for(i = t + 1 ; i < strlen(pszin) ; i++)
pszin[i - t - 1] = pszin[i] ;
pszin[i-t-1] = '\0' ;
return 1 ;
}
main()
{
char *pc = new char[6] ;
strcpy(pc, "hello") ;
cout << pc << endl ;
CutByChar(pc, 'e') ;
cout << pc << endl ;
delete [] pc ;
}
mr_oydy
2003-04-14
打赏
举报
回复
冷也好热也好改过来就好 :)
messagebox
2003-04-14
打赏
举报
回复
to mr_oydy(CA::*pmf)(unsigned*) :
我刚注意到这个问题了,应该是
int CutByChar(char *pszin, char c)
{
int i,t;
for(i=0; pszin[i]!='c' && pszin[i] != '\0';i++) /*找出‘c’
t=i;
if(pszin[t] == '\0')
return 0 ;
for(i=0;i<=t;i++)
pszin[i]=pszin[t+i]; /*实现功能*/
return 1 ;
}
main()
{
char *pc = new char[6] ;
strcpy(pc, "hello") ;
CutByChar(pc, 'e') ; //
delete [] pc ;
}
mr_oydy
2003-04-14
打赏
举报
回复
main()
{
char *pc = new char[6] ;
pc = "hello" ; // 野指针, pc的值已经不是指向char[6]了
CutByChar(pc, 'e') ; // 不能改变pc, 因为CutByChar的第一个参数是char*而不是char*&
delete [] pc ; //不能释放
}
messagebox
2003-04-14
打赏
举报
回复
//不好意思,上面delete语句写错了
int CutByChar(char *pszIn,char c)
{
while(*pszIn != c && *pszIn !='\0')
pszIn++ ;
if(*pszIn != '\0')
pszIn++ ;
return 1 ;
}
main()
{
char *pc = new char[6] ;
pc = "hello" ;
CutByChar(pc, 'e') ;
delete [] pc ; //空间全部在此释放了
}
messagebox
2003-04-14
打赏
举报
回复
int CutByChar(char *pszIn,char c)
{
while(*pszIn != c && *pszIn !='\0')
pszIn++ ;
if(*pszIn != '\0')
pszIn++ ;
return 1 ;
}
main()
{
char *pc = new char[6] ;
pc = "hello" ;
CutByChar(pc, 'e') ;
delete pc ; //空间全部在此释放了
}
messagebox
2003-04-14
打赏
举报
回复
to benniao2(笨):
for(i=0;i<=t;i++)
pszin[i]=pszin[t+i]; /*实现功能*/
这不对吧,应该是:
for(i = t + 1 ; i < strlen(pszIn) ; i++)
pszin[i - t - 1] ;
pszin[i - t] = '\0' ;
98440622
2003-04-14
打赏
举报
回复
楼主到底是想说明什么问题?!
我认为benniao2的方法就是正确的了,字串数组本身就没什么快速的查找方法,而且你的要求又规定只能是查找第一次出现的字符,所以我认为(笨)的方法可以了。
另外在实际问题中,我想你不会定义个字串有《三国演义》那么长吧!
battlet
2003-04-14
打赏
举报
回复
int CutByChar(char *pszIn,char c)
{
while(*pszIn != c && *pszIn != '/0')
pszIn++ ;
if (*pszIn != c)
pszIn++ ;
return 1 ;
}
关于: 如果移动指针到指定的字串,之后返回这个指针,那么前面的空间怎么办?
前面还有一些字符没有删除,是不是系统会自动把这个空间收回?或是发生
内存泄漏?
要看你的传入字符串是分配在什么地方,如果是分配在栈中(即局部变量)系统自动释放空间。
如果是在堆上分配的(即用new分配)的要自己手动删除,只要用处理前的指针删除就不会内存泄漏了。
askquestion2002
2003-04-14
打赏
举报
回复
messagebox(冷也好热也好活着就好)
如果移动指针到指定的字串,之后返回这个指针,那么前面的空间怎么办?
前面还有一些字符没有删除,是不是系统会自动把这个空间收回?或是发生
内存泄漏?
benniao2(笨)
查找字符位置,需要进行遍历。
但是删除字符时要进行大量的字符移动,速度应该受到很大的影响。
benniao2
2003-04-14
打赏
举报
回复
int cutbychar(char pszin[]) /*pszin 应是数组*/
{
int i,t;
for(i=0;pszin[i]!='c';i++) /*找出‘c’ 的位置*/
t=i;
for(i=0;i<=t;i++)
pszin[i]=pszin[t+i]; /*实现功能*/
return psain;
}
messagebox
2003-04-14
打赏
举报
回复
int CutByChar(char *pszIn,char c)
{
while(*pszIn != c)
pszIn++ ;
pszIn++ ;
return 1 ;
}
askquestion2002
2003-04-14
打赏
举报
回复
注:
要使用TC2.0中的字串处理函数。
字符串
改变
及地址
改变
(
字符串
内存地址)
字符串
内容一旦定义了就不能
改变
。每次
改变
都会重新开辟一个内存空间存储新的内容。
字符串
创建对象(赋值)有两种方式: 通过构造方法创建对象。 通过直接赋值创建对象。 如图: 区别: 构造方法创建
字符串
...
C++
字符串
与字符数组 详解
在C++中,有两种类型的
字符串
表示形式: C-风格
字符串
C++引入的string类 C-风格
字符串
C 风格的
字符串
起源于 C 语言,并在 C++ 中继续得到支持。
字符串
实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。...
C语言如何
改变
字符串
的值,C语言中
字符串
的赋值
1、定义的时候直接用
字符串
赋值char a[10]="hello";注意:不能先定义再给它赋值,如char a[10];a[10]="hello";这样是错误的!2、对数组中字符逐个赋值char a[10]={'h','e','l','l','o'};3、利用strcpychar a[10]; ...
python
字符串
中某个字符修改_Python中修改
字符串
的四种方法
因此
改变
一个
字符串
的元素需要新建一个新的
字符串
。常见的修改方法有以下4种。方法1:将
字符串
转换成列表后修改值,然后用join组成新
字符串
>>> s='abcdef' #原
字符串
>>> s1=list(s) #将
字符串
转换...
python 如何
改变
字符串
中某一个值_python替换
字符串
中的某个字符
python_split_strip_replace使用方法...一、Split()作用:将
字符串
分割成为列表,不
改变
字符串
原始值这里以x为分割符,将a分成了含有三个元素的列表并输出。但不...文章科技小先锋2017-11-15910浏览量正则表达式简介...
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章