CString newStr="You";
我现在只想将str中的第一个s%替换为newStr,怎么弄;
45 个解决方案
#1
先Find,然后把前面复制出来,再加上新字符串,再把后面复制出来。
#2
如果我只想替换第二个s%呢?
#3
你那s%什么意思?
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
CString str2;
str2.Format(str, newStr);
#4
你这样是不行的,不信你试试去。
#5
你看清楚了,我写的是%s不是s%.
#6
CString newStr="You";
CString newStr2="her";
CString newStr3="she";
CString str=_T("");
str.format("%s love %s,%s doesn't love %s",newStr,newStr2,newStr3,newStr);
这样,str的值就是you love her,she doesn't love you
如果你没有贴错,那么,用string的find(),insert()进行操作就可以了
CString newStr2="her";
CString newStr3="she";
CString str=_T("");
str.format("%s love %s,%s doesn't love %s",newStr,newStr2,newStr3,newStr);
这样,str的值就是you love her,she doesn't love you
如果你没有贴错,那么,用string的find(),insert()进行操作就可以了
#7
若是s%,并且你想使用Format函数进行格式化,你可以将str这样修改:CString str="%s love s%%,s%% doesn't love s%%";
代码就变成:
如果使用串"%s love s%,s% doesn't love s%",然后使用Format的话,程序会报错。
原因很简单,因为Format函数使用的是不定参数,它自动把所有%(x)给当作参数了,然后解析“%,”时,就出错了。
代码就变成:
CString str="%s love s%%,s%% doesn't love s%%";
CString newStr="You";
CString str2;
str2.Format(str, newStr);
如果使用串"%s love s%,s% doesn't love s%",然后使用Format的话,程序会报错。
原因很简单,因为Format函数使用的是不定参数,它自动把所有%(x)给当作参数了,然后解析“%,”时,就出错了。
#8
str.Replace("%s",newStr);
#9
我知道,我上面的写错了,应该全部都是%s,
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
CString str2;
str2.Format(str, newStr);
但是这样还是不行的,你自己试试,%s的数目与后面提供的替代部分数目不一致。
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
CString str2;
str2.Format(str, newStr);
但是这样还是不行的,你自己试试,%s的数目与后面提供的替代部分数目不一致。
#10
我想知道是替换所有%s其中特定的一个。其他的不变。
#11
这还不好说:
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
CString str2;
str2.Format(str, newStr, _T("%s"), _T("%s"), _T("%s"));
#12
其实我真正的意图在这个帖子里面说的很详细:http://topic.csdn.net/u/20080519/20/7c8b4be7-5254-4f4c-8ec8-e2a2798118a9.html
其实我的问题呢也就是不知道这个str里面会有多少个%s,所以我想搞个循环,每次只替换从左到有第一个,但现在还没找到比较好的替换第一个的方案。
其实我的问题呢也就是不知道这个str里面会有多少个%s,所以我想搞个循环,每次只替换从左到有第一个,但现在还没找到比较好的替换第一个的方案。
#13
为啥要只替换第一个呢 好奇怪的需求呵呵。
要不试试str2.Format(str, newStr,"\%s", "\%s","\%s");
要不试试str2.Format(str, newStr,"\%s", "\%s","\%s");
#14
Format函数是基于不定参数实现的,你后面跟一个参数,那它只会匹配第一个。譬如:
Format("%s %s %s ...", _T("abc"));
这样的话,abc串会对应格式化第一个%s,其他他不管。
Format("%s %s %s ...", _T("abc"));
这样的话,abc串会对应格式化第一个%s,其他他不管。
#15
我求求你,你就简单地去试试不行吗,我这样弄了一千遍,检查了一千遍,根本不行,一运行就崩溃了嘛
#16
CString str="%s Love %s,%s doesn't Love %s";
CString newStr="You";
CString str2;
str2.Format(str, newStr);
MessageBox(str2);
这就是我的代码,你看有什么问题?
CString newStr="You";
CString str2;
str2.Format(str, newStr);
MessageBox(str2);
这就是我的代码,你看有什么问题?
#17
请认真查看你的代码中的每一个字符,不要出现类似s%这样的情况,我说过了,这肯定会产生断言的。
另外,代码我试了,没有崩溃。
另外,代码我试了,没有崩溃。
#18
那把你的代码贴给我,我试试看,我上面的代码是从程序里面复制过来的。
#19
CString str="%s Love %%s,%%s doesn't Love %%s";
CString newStr="You";
CString str2;
str2.Format(str, newStr);
MessageBox(str2);
#20
原来你是这样,我的是
CString str="%s Love %s,%s doesn't Love %s";
啊,str等于多少有不确定的情况,你这样的%%s从何而来??
CString str="%s Love %s,%s doesn't Love %s";
啊,str等于多少有不确定的情况,你这样的%%s从何而来??
#21
若如此,你可在str中查找%,除第一个%外,其他全部多加一个%,即可。
#22
我的问题也就是在于:怎样将字符串中特定的部分替换成目标部分?
#23
不是替换,是插入。
首先,查找%的位置
如果是第一个,不进行操作,继续
在查找到的%的位置,插入一个%
循环
首先,查找%的位置
如果是第一个,不进行操作,继续
在查找到的%的位置,插入一个%
循环
#24
怎样查找除第一个之外的其他%s?
#25
还有办法就是使用子串。
譬如:"%s Love %s,%s doesn't Love %s";
你首先把它拆成:
str1 = "%s";
str2 = " Love %s,%s doesn't Love %s;
然后CString str3;
str3.Format(str1, newStr);
str3 += str2;
譬如:"%s Love %s,%s doesn't Love %s";
你首先把它拆成:
str1 = "%s";
str2 = " Love %s,%s doesn't Love %s;
然后CString str3;
str3.Format(str1, newStr);
str3 += str2;
#26
办法是很多的,你仔细看看MSDN吧,很晚了,我就不回帖了。
祝安。
祝安。
#27
str.Delete(str.Find("s%"),2);
str.Insert(i,newStr);
str.Insert(i,newStr);
#28
上面写漏了
int i = str.Find("s%");
str.Delete(i,2);
str.Insert(i,newStr);
int i = str.Find("s%");
str.Delete(i,2);
str.Insert(i,newStr);
#29
哥们,非常感谢你,到目前为止,甚至有几星牛人建议我在底层用汇编写,你这个方法蛮有效。但是如果我想替换的不是第一个%s,而是第二个,或者第三个,总之其中特定的一个,该怎么写?
#30
int pos=1;//第几个替换
int s=0;
for(int i=1;i<=pos;i++)
{
s = str.Find(s,"%s");
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
}
}
int s=0;
for(int i=1;i<=pos;i++)
{
s = str.Find(s,"%s");
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
}
}
#31
int pos=1;//第几个替换
int s=0;
for(int i=1;i <=pos;i++)
{
s = str.Find(s,"%s");
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
break;
}
s+=2;//加上偏移
}
int s=0;
for(int i=1;i <=pos;i++)
{
s = str.Find(s,"%s");
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
break;
}
s+=2;//加上偏移
}
#32
不好意思,手写的没调式
有点问题 ,改这句 s = str.Find("%s",s);
这个是正确的
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
int pos=3;//第几个替换
int s=0;
for(int i=1;i <=pos;i++)
{
s = str.Find("%s",s);
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
}
s+=2;
}
有点问题 ,改这句 s = str.Find("%s",s);
这个是正确的
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
int pos=3;//第几个替换
int s=0;
for(int i=1;i <=pos;i++)
{
s = str.Find("%s",s);
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
}
s+=2;
}
#33
搞个查找循环,
找到一个就替换、跳出
找到一个就替换、跳出
#34
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
int pos=3;//第几个替换
int s=0;
for(int i=1;i <=pos;i++)
{
s = str.Find("%s",s);
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
}
s+=2;//加上偏移
}
CString newStr="You";
int pos=3;//第几个替换
int s=0;
for(int i=1;i <=pos;i++)
{
s = str.Find("%s",s);
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
}
s+=2;//加上偏移
}
#35
正解
不知道有没有replace方法
#36
Dim str As String = "%s Love %s,%s doesn't Love %s"
Dim newstr As String = "you"
Dim pos As Integer
pos = InStr(2, str, "%s")
Dim str2 As String = str.Substring(0, pos - 1)
Dim str3 As String = str.Substring(pos - 1, 2)
Dim str4 As String = str.Substring(pos + 1, str.Length - pos - 1)
Dim str5 As String = str3.Replace(str3, newstr)
Dim str6 As String = str2 + str5 + str4
str6 的结果为:%s Love you,%s doesn't Love %s
#37
up
#38
.........................俺感觉..
串从你要替换的那个字符那里分两段..
把前面换掉后接上后面不就可以了吗:??
CString str="%s love s%,s% doesn't love s%";
CString newStr="You";
我现在只想将str中的第一个s%替换为newStr,怎么弄;
int i;
i=str.IndexOf('%s');
string string1=str.substring(0,i+1);
string string2=str.substring(i+1,str.legth);
string1=string1.replace(string1,'%s',newStr)+string2;
串从你要替换的那个字符那里分两段..
把前面换掉后接上后面不就可以了吗:??
CString str="%s love s%,s% doesn't love s%";
CString newStr="You";
我现在只想将str中的第一个s%替换为newStr,怎么弄;
int i;
i=str.IndexOf('%s');
string string1=str.substring(0,i+1);
string string2=str.substring(i+1,str.legth);
string1=string1.replace(string1,'%s',newStr)+string2;
#39
#40
先看看
#41
CString str;
CString newStr="You";
str.Format("%s love s%,s% doesn't love s%",newStr);
CString newStr="You";
str.Format("%s love s%,s% doesn't love s%",newStr);
#42
别逗了,你真外行!
#43
我觉得行
#44
打错了,直接用string提供的功能应该行了
#45
LZ好牛啊!
是替换s%啊。开始我看错了,看成替换%s,
简单一点
size_type string::find (const string& str) const
string& string ::replace (size_type idx, size_type len, const string& str)可以搞定
是替换s%啊。开始我看错了,看成替换%s,
简单一点
size_type string::find (const string& str) const
string& string ::replace (size_type idx, size_type len, const string& str)可以搞定
#1
先Find,然后把前面复制出来,再加上新字符串,再把后面复制出来。
#2
如果我只想替换第二个s%呢?
#3
你那s%什么意思?
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
CString str2;
str2.Format(str, newStr);
#4
你这样是不行的,不信你试试去。
#5
你看清楚了,我写的是%s不是s%.
#6
CString newStr="You";
CString newStr2="her";
CString newStr3="she";
CString str=_T("");
str.format("%s love %s,%s doesn't love %s",newStr,newStr2,newStr3,newStr);
这样,str的值就是you love her,she doesn't love you
如果你没有贴错,那么,用string的find(),insert()进行操作就可以了
CString newStr2="her";
CString newStr3="she";
CString str=_T("");
str.format("%s love %s,%s doesn't love %s",newStr,newStr2,newStr3,newStr);
这样,str的值就是you love her,she doesn't love you
如果你没有贴错,那么,用string的find(),insert()进行操作就可以了
#7
若是s%,并且你想使用Format函数进行格式化,你可以将str这样修改:CString str="%s love s%%,s%% doesn't love s%%";
代码就变成:
如果使用串"%s love s%,s% doesn't love s%",然后使用Format的话,程序会报错。
原因很简单,因为Format函数使用的是不定参数,它自动把所有%(x)给当作参数了,然后解析“%,”时,就出错了。
代码就变成:
CString str="%s love s%%,s%% doesn't love s%%";
CString newStr="You";
CString str2;
str2.Format(str, newStr);
如果使用串"%s love s%,s% doesn't love s%",然后使用Format的话,程序会报错。
原因很简单,因为Format函数使用的是不定参数,它自动把所有%(x)给当作参数了,然后解析“%,”时,就出错了。
#8
str.Replace("%s",newStr);
#9
我知道,我上面的写错了,应该全部都是%s,
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
CString str2;
str2.Format(str, newStr);
但是这样还是不行的,你自己试试,%s的数目与后面提供的替代部分数目不一致。
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
CString str2;
str2.Format(str, newStr);
但是这样还是不行的,你自己试试,%s的数目与后面提供的替代部分数目不一致。
#10
我想知道是替换所有%s其中特定的一个。其他的不变。
#11
这还不好说:
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
CString str2;
str2.Format(str, newStr, _T("%s"), _T("%s"), _T("%s"));
#12
其实我真正的意图在这个帖子里面说的很详细:http://topic.csdn.net/u/20080519/20/7c8b4be7-5254-4f4c-8ec8-e2a2798118a9.html
其实我的问题呢也就是不知道这个str里面会有多少个%s,所以我想搞个循环,每次只替换从左到有第一个,但现在还没找到比较好的替换第一个的方案。
其实我的问题呢也就是不知道这个str里面会有多少个%s,所以我想搞个循环,每次只替换从左到有第一个,但现在还没找到比较好的替换第一个的方案。
#13
为啥要只替换第一个呢 好奇怪的需求呵呵。
要不试试str2.Format(str, newStr,"\%s", "\%s","\%s");
要不试试str2.Format(str, newStr,"\%s", "\%s","\%s");
#14
Format函数是基于不定参数实现的,你后面跟一个参数,那它只会匹配第一个。譬如:
Format("%s %s %s ...", _T("abc"));
这样的话,abc串会对应格式化第一个%s,其他他不管。
Format("%s %s %s ...", _T("abc"));
这样的话,abc串会对应格式化第一个%s,其他他不管。
#15
我求求你,你就简单地去试试不行吗,我这样弄了一千遍,检查了一千遍,根本不行,一运行就崩溃了嘛
#16
CString str="%s Love %s,%s doesn't Love %s";
CString newStr="You";
CString str2;
str2.Format(str, newStr);
MessageBox(str2);
这就是我的代码,你看有什么问题?
CString newStr="You";
CString str2;
str2.Format(str, newStr);
MessageBox(str2);
这就是我的代码,你看有什么问题?
#17
请认真查看你的代码中的每一个字符,不要出现类似s%这样的情况,我说过了,这肯定会产生断言的。
另外,代码我试了,没有崩溃。
另外,代码我试了,没有崩溃。
#18
那把你的代码贴给我,我试试看,我上面的代码是从程序里面复制过来的。
#19
CString str="%s Love %%s,%%s doesn't Love %%s";
CString newStr="You";
CString str2;
str2.Format(str, newStr);
MessageBox(str2);
#20
原来你是这样,我的是
CString str="%s Love %s,%s doesn't Love %s";
啊,str等于多少有不确定的情况,你这样的%%s从何而来??
CString str="%s Love %s,%s doesn't Love %s";
啊,str等于多少有不确定的情况,你这样的%%s从何而来??
#21
若如此,你可在str中查找%,除第一个%外,其他全部多加一个%,即可。
#22
我的问题也就是在于:怎样将字符串中特定的部分替换成目标部分?
#23
不是替换,是插入。
首先,查找%的位置
如果是第一个,不进行操作,继续
在查找到的%的位置,插入一个%
循环
首先,查找%的位置
如果是第一个,不进行操作,继续
在查找到的%的位置,插入一个%
循环
#24
怎样查找除第一个之外的其他%s?
#25
还有办法就是使用子串。
譬如:"%s Love %s,%s doesn't Love %s";
你首先把它拆成:
str1 = "%s";
str2 = " Love %s,%s doesn't Love %s;
然后CString str3;
str3.Format(str1, newStr);
str3 += str2;
譬如:"%s Love %s,%s doesn't Love %s";
你首先把它拆成:
str1 = "%s";
str2 = " Love %s,%s doesn't Love %s;
然后CString str3;
str3.Format(str1, newStr);
str3 += str2;
#26
办法是很多的,你仔细看看MSDN吧,很晚了,我就不回帖了。
祝安。
祝安。
#27
str.Delete(str.Find("s%"),2);
str.Insert(i,newStr);
str.Insert(i,newStr);
#28
上面写漏了
int i = str.Find("s%");
str.Delete(i,2);
str.Insert(i,newStr);
int i = str.Find("s%");
str.Delete(i,2);
str.Insert(i,newStr);
#29
哥们,非常感谢你,到目前为止,甚至有几星牛人建议我在底层用汇编写,你这个方法蛮有效。但是如果我想替换的不是第一个%s,而是第二个,或者第三个,总之其中特定的一个,该怎么写?
#30
int pos=1;//第几个替换
int s=0;
for(int i=1;i<=pos;i++)
{
s = str.Find(s,"%s");
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
}
}
int s=0;
for(int i=1;i<=pos;i++)
{
s = str.Find(s,"%s");
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
}
}
#31
int pos=1;//第几个替换
int s=0;
for(int i=1;i <=pos;i++)
{
s = str.Find(s,"%s");
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
break;
}
s+=2;//加上偏移
}
int s=0;
for(int i=1;i <=pos;i++)
{
s = str.Find(s,"%s");
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
break;
}
s+=2;//加上偏移
}
#32
不好意思,手写的没调式
有点问题 ,改这句 s = str.Find("%s",s);
这个是正确的
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
int pos=3;//第几个替换
int s=0;
for(int i=1;i <=pos;i++)
{
s = str.Find("%s",s);
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
}
s+=2;
}
有点问题 ,改这句 s = str.Find("%s",s);
这个是正确的
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
int pos=3;//第几个替换
int s=0;
for(int i=1;i <=pos;i++)
{
s = str.Find("%s",s);
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
}
s+=2;
}
#33
搞个查找循环,
找到一个就替换、跳出
找到一个就替换、跳出
#34
CString str="%s love %s,%s doesn't love %s";
CString newStr="You";
int pos=3;//第几个替换
int s=0;
for(int i=1;i <=pos;i++)
{
s = str.Find("%s",s);
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
}
s+=2;//加上偏移
}
CString newStr="You";
int pos=3;//第几个替换
int s=0;
for(int i=1;i <=pos;i++)
{
s = str.Find("%s",s);
if(i==pos)
{
str.Delete(s,2);
str.Insert(s,newStr);
}
s+=2;//加上偏移
}
#35
正解
不知道有没有replace方法
#36
Dim str As String = "%s Love %s,%s doesn't Love %s"
Dim newstr As String = "you"
Dim pos As Integer
pos = InStr(2, str, "%s")
Dim str2 As String = str.Substring(0, pos - 1)
Dim str3 As String = str.Substring(pos - 1, 2)
Dim str4 As String = str.Substring(pos + 1, str.Length - pos - 1)
Dim str5 As String = str3.Replace(str3, newstr)
Dim str6 As String = str2 + str5 + str4
str6 的结果为:%s Love you,%s doesn't Love %s
#37
up
#38
.........................俺感觉..
串从你要替换的那个字符那里分两段..
把前面换掉后接上后面不就可以了吗:??
CString str="%s love s%,s% doesn't love s%";
CString newStr="You";
我现在只想将str中的第一个s%替换为newStr,怎么弄;
int i;
i=str.IndexOf('%s');
string string1=str.substring(0,i+1);
string string2=str.substring(i+1,str.legth);
string1=string1.replace(string1,'%s',newStr)+string2;
串从你要替换的那个字符那里分两段..
把前面换掉后接上后面不就可以了吗:??
CString str="%s love s%,s% doesn't love s%";
CString newStr="You";
我现在只想将str中的第一个s%替换为newStr,怎么弄;
int i;
i=str.IndexOf('%s');
string string1=str.substring(0,i+1);
string string2=str.substring(i+1,str.legth);
string1=string1.replace(string1,'%s',newStr)+string2;
#39
#40
先看看
#41
CString str;
CString newStr="You";
str.Format("%s love s%,s% doesn't love s%",newStr);
CString newStr="You";
str.Format("%s love s%,s% doesn't love s%",newStr);
#42
别逗了,你真外行!
#43
我觉得行
#44
打错了,直接用string提供的功能应该行了
#45
LZ好牛啊!
是替换s%啊。开始我看错了,看成替换%s,
简单一点
size_type string::find (const string& str) const
string& string ::replace (size_type idx, size_type len, const string& str)可以搞定
是替换s%啊。开始我看错了,看成替换%s,
简单一点
size_type string::find (const string& str) const
string& string ::replace (size_type idx, size_type len, const string& str)可以搞定