问题2:另外如果要对这个串进行如下替换操作:
1.从左至右查找字符d,
2.找到d后判断d的左边是不是c,右边是不是e,如果满足,则将d替换成X
这样,上面的字符串"abcdeabcd"中有两个d,但只有第一个d满足条件,所以结果应该是"abcXeabcd",
而不应该是"abcXeabcX",我能想到的就是先把字符串存到字符数组里,然后用循环+指针来完成,然后再存回字符串,但不知道有没有不用字符数组就能做到的函数或方法?
10 个解决方案
#1
问题1:如果有一个string,比如就是"abcdeabcd",我想把这个串存到字符数组里去,怎么做比较好?
==========================
//...
char *ptr = "abcdeabcd";
char str[30];
for (int i = 0; str[i++] = *ptr++; )
;
//code...
==========================
//...
char *ptr = "abcdeabcd";
char str[30];
for (int i = 0; str[i++] = *ptr++; )
;
//code...
#2
问题2:
//code...
int i = 1;
while (str[i])
{
if (str[i-1] == 'c' && str[i] == 'd' && str[i+1] == 'e')
{
str[i] = 'X';
}
}
//code...
//code...
int i = 1;
while (str[i])
{
if (str[i-1] == 'c' && str[i] == 'd' && str[i+1] == 'e')
{
str[i] = 'X';
}
}
//code...
#3
,但不知道有没有不用字符数组就能做到的函数或方法?
================
原来楼主是要实现这样的目的才把字符串存到数组里啊 ...
那根本不用数组 ...
//code...
char *ptr = NULL;
if (!(ptr=(char *)malloc(100))) exit (1);
strcpy(ptr, "abcdeabcd");
while (*ptr)
{
if (*ptr == 'c' && *(ptr+1) == 'd' && *(ptr+2) == 'e')
{
*++ptr = 'X';
}
++ptr;
}
free(ptr);
//code...
================
原来楼主是要实现这样的目的才把字符串存到数组里啊 ...
那根本不用数组 ...
//code...
char *ptr = NULL;
if (!(ptr=(char *)malloc(100))) exit (1);
strcpy(ptr, "abcdeabcd");
while (*ptr)
{
if (*ptr == 'c' && *(ptr+1) == 'd' && *(ptr+2) == 'e')
{
*++ptr = 'X';
}
++ptr;
}
free(ptr);
//code...
#4
用一个指针指向这个 string,
然后就把这个指针当作数组用吧 ...
然后就把这个指针当作数组用吧 ...
#5
问题1:如果有一个string,比如就是"abcdeabcd",我想把这个串存到字符数组里去,怎么做比较好?
------------------------------------------------------
string str("abcdeabcd");
const char *a = str.c_str();
cout<<a;
------------------------------------------------------
string str("abcdeabcd");
const char *a = str.c_str();
cout<<a;
#6
s.c_str() 楼上正解.
vector可以用 &v[0] 得到的指针当数组用.
但string不能&s[0]得到的指针当c字符数组来用. string里字符存储的不保证是连续的.也不保证是以'\0'结尾的.
<<Effective STL>>条款16: 如何将vector和string的数据传给遗留的API
#7
找到一个函数
void string_replace(string & strBig, const string & strsrc, const string &strdst) {
string::size_type pos=0;
string::size_type srclen=strsrc.size();
string::size_type dstlen=strdst.size();
while( (pos=strBig.find(strsrc, pos)) != string::npos){
strBig.replace(pos, srclen, strdst);
pos += dstlen;
}
}
使用:
string s = "abcdeabcdecd";
string_replace(s,"cde", "cXe");
#8
路过~~
#9
const char *a = str.c_str();
//
会多一个’/0‘,data()才是王道!
//
会多一个’/0‘,data()才是王道!
#10
mark
#1
问题1:如果有一个string,比如就是"abcdeabcd",我想把这个串存到字符数组里去,怎么做比较好?
==========================
//...
char *ptr = "abcdeabcd";
char str[30];
for (int i = 0; str[i++] = *ptr++; )
;
//code...
==========================
//...
char *ptr = "abcdeabcd";
char str[30];
for (int i = 0; str[i++] = *ptr++; )
;
//code...
#2
问题2:
//code...
int i = 1;
while (str[i])
{
if (str[i-1] == 'c' && str[i] == 'd' && str[i+1] == 'e')
{
str[i] = 'X';
}
}
//code...
//code...
int i = 1;
while (str[i])
{
if (str[i-1] == 'c' && str[i] == 'd' && str[i+1] == 'e')
{
str[i] = 'X';
}
}
//code...
#3
,但不知道有没有不用字符数组就能做到的函数或方法?
================
原来楼主是要实现这样的目的才把字符串存到数组里啊 ...
那根本不用数组 ...
//code...
char *ptr = NULL;
if (!(ptr=(char *)malloc(100))) exit (1);
strcpy(ptr, "abcdeabcd");
while (*ptr)
{
if (*ptr == 'c' && *(ptr+1) == 'd' && *(ptr+2) == 'e')
{
*++ptr = 'X';
}
++ptr;
}
free(ptr);
//code...
================
原来楼主是要实现这样的目的才把字符串存到数组里啊 ...
那根本不用数组 ...
//code...
char *ptr = NULL;
if (!(ptr=(char *)malloc(100))) exit (1);
strcpy(ptr, "abcdeabcd");
while (*ptr)
{
if (*ptr == 'c' && *(ptr+1) == 'd' && *(ptr+2) == 'e')
{
*++ptr = 'X';
}
++ptr;
}
free(ptr);
//code...
#4
用一个指针指向这个 string,
然后就把这个指针当作数组用吧 ...
然后就把这个指针当作数组用吧 ...
#5
问题1:如果有一个string,比如就是"abcdeabcd",我想把这个串存到字符数组里去,怎么做比较好?
------------------------------------------------------
string str("abcdeabcd");
const char *a = str.c_str();
cout<<a;
------------------------------------------------------
string str("abcdeabcd");
const char *a = str.c_str();
cout<<a;
#6
s.c_str() 楼上正解.
vector可以用 &v[0] 得到的指针当数组用.
但string不能&s[0]得到的指针当c字符数组来用. string里字符存储的不保证是连续的.也不保证是以'\0'结尾的.
<<Effective STL>>条款16: 如何将vector和string的数据传给遗留的API
#7
找到一个函数
void string_replace(string & strBig, const string & strsrc, const string &strdst) {
string::size_type pos=0;
string::size_type srclen=strsrc.size();
string::size_type dstlen=strdst.size();
while( (pos=strBig.find(strsrc, pos)) != string::npos){
strBig.replace(pos, srclen, strdst);
pos += dstlen;
}
}
使用:
string s = "abcdeabcdecd";
string_replace(s,"cde", "cXe");
#8
路过~~
#9
const char *a = str.c_str();
//
会多一个’/0‘,data()才是王道!
//
会多一个’/0‘,data()才是王道!
#10
mark