怎么把一个string存到字符数组里?

时间:2022-04-09 19:02:24
问题1:如果有一个string,比如就是"abcdeabcd",我想把这个串存到字符数组里去,怎么做比较好?

问题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...

#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...

#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...

#4


用一个指针指向这个  string,
然后就把这个指针当作数组用吧 ...

#5


问题1:如果有一个string,比如就是"abcdeabcd",我想把这个串存到字符数组里去,怎么做比较好?
------------------------------------------------------
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()才是王道!

#10


mark

#1


问题1:如果有一个string,比如就是"abcdeabcd",我想把这个串存到字符数组里去,怎么做比较好?
==========================
//...
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...

#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...

#4


用一个指针指向这个  string,
然后就把这个指针当作数组用吧 ...

#5


问题1:如果有一个string,比如就是"abcdeabcd",我想把这个串存到字符数组里去,怎么做比较好?
------------------------------------------------------
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()才是王道!

#10


mark