急问高手c++把一个string 中的某一个位置上的字符传给另一个string如何实现?

时间:2021-03-07 10:53:52
c++把一个string 中的某一个位置上的字符传给另一个string如何实现?

如 
stirng line=“abcdefg”;
string a;

要把 line的第3个给string a 应该如何做?
a=line[3];
报错说 char 不能转换成string。

22 个解决方案

#1


怎么可能不能转换呢

#2


请问怎么转,具体写一下。
最好能给多个方案

stirng line=“abcdefg”;
string a;

要把 line的第3个给string a 应该如何做?
a=line[3];
报错说 char 不能转换成string。 

#3


在后面加个'\0'
char temp[] = {line[3],'\0'};
string a = temp;

#4


加0?肯定不是这个问题 ,直接string a= line[3];转换没问题,问题出在别的地方,楼主检查下别的地方

#5


谢谢,还有别的方案吗?
比如一句话搞定。

不知道
string a=line[3].c_str();
行不行?

#6


#include "stdafx.h"
#include <iostream> 
#include <string>
using namespace std;


int main(){
string a = "abcdefg";
string c =  a.substr(2,1);
cout<<c;
return 0;
}

#7


不知道 c_str() 具体是什么功能?


我这里是传参数
难道是因为参数是 f(std::sting& a)
然后我把line[3]传给了 string&
f(line[3])
然后错了?
为什么会错呢?

#8


引用 6 楼 lihan6415151528 的回复:
C/C++ code#include"stdafx.h"
#include<iostream> 
#include<string>usingnamespace std;int main(){string a="abcdefg";string c=  a.substr(2,1);
    cout<<c;return0;
}


谢谢,之前我用这个解决了。
我想知道,为什么会错呢?
谁能解答一下

#9


3楼方法是正确的
string类型和字符串注意要有'\0'
"abc"其实在默认后面有'\0'的,只是没用显式的写出来

string类中没用提供如下的赋值运算
string &operater=(char ch) ;
只提供了
string &operater=(const string &str) ;

所以如下赋值也是不安全的,注意字符串结尾必须有'0'
char a[] = {'a','b'} ;
string str2(a) ;

#10


引用 7 楼 fblgzdq 的回复:
不知道 c_str() 具体是什么功能?


 我这里是传参数
 难道是因为参数是 f(std::sting& a)
 然后我把line[3]传给了 string&
 f(line[3])
 然后错了?
 为什么会错呢?

参数类型不匹配啊,一个是string的引用类型,一个是char

#11


引用 10 楼 wanghao111 的回复:
引用 7 楼 fblgzdq 的回复:
 不知道 c_str() 具体是什么功能?


  我这里是传参数
  难道是因为参数是 f(std::sting& a)
  然后我把line[3]传给了 string&
  f(line[3])
  然后错了?
  为什么会错呢?


 参数类型不匹配啊,一个是string的引用类型,一个是char


那把char 传给 string的引用类型  除了 a.substr(2,1);
还有什么别的办法呢?
谢谢

#12


char放入string可以用push_back,因为string基本等于vector<char>
	string line="abcdefg";
string a;
a.push_back(line[3]);
另外注意,虽然你可以把'\0'放进string,但实际string并不需要'\0',它自己管理长度

#13


f(std::string& a)
{
}
a.substr(2,1);返回的是string,所以传给f()没问题
而line[3]是char,string并没有定义自动转换char到string的构造器,所以失败

#14


+=

#15


别的方法,也就是把string当作vector<char>来操作就行了,随便举个例子
void f(std::string& a)
{
cout << a << endl;
}

int main()
{
string line="abcdefg";
f(string(line.begin()+2, line.begin()+3));
return 0;
}

#16


string a="woods";
string b;
b=a.substr(3,1);

 cout<<b;<<endl    //b="o";

#17


应该用
b=a.at(3);

#18


需要将a先初始化

#include <iostream>
using namespace std; 
int main()
{
string line="abcdefg" ;
string a = ""; 
a = line[3];
cout << a.c_str() << endl;
return 0;
}

#19


建议完整看看C++ Primer 4th。
你这样学习,会存在大量盲区的。还是系统学习一下比较好

#20


应该用 
a=line.at(3); 

#21


引用楼主 fblgzdq 的回复:
c++把一个string 中的某一个位置上的字符传给另一个string如何实现?

 如
 stirng line=“abcdefg”;
 string a;

 要把 line的第3个给string a 应该如何做?
 a=line[3];
 报错说 char 不能转换成string。

我用c-free 3.5 没有报错啊

#22


a.push_back(line[3]);

#1


怎么可能不能转换呢

#2


请问怎么转,具体写一下。
最好能给多个方案

stirng line=“abcdefg”;
string a;

要把 line的第3个给string a 应该如何做?
a=line[3];
报错说 char 不能转换成string。 

#3


在后面加个'\0'
char temp[] = {line[3],'\0'};
string a = temp;

#4


加0?肯定不是这个问题 ,直接string a= line[3];转换没问题,问题出在别的地方,楼主检查下别的地方

#5


谢谢,还有别的方案吗?
比如一句话搞定。

不知道
string a=line[3].c_str();
行不行?

#6


#include "stdafx.h"
#include <iostream> 
#include <string>
using namespace std;


int main(){
string a = "abcdefg";
string c =  a.substr(2,1);
cout<<c;
return 0;
}

#7


不知道 c_str() 具体是什么功能?


我这里是传参数
难道是因为参数是 f(std::sting& a)
然后我把line[3]传给了 string&
f(line[3])
然后错了?
为什么会错呢?

#8


引用 6 楼 lihan6415151528 的回复:
C/C++ code#include"stdafx.h"
#include<iostream> 
#include<string>usingnamespace std;int main(){string a="abcdefg";string c=  a.substr(2,1);
    cout<<c;return0;
}


谢谢,之前我用这个解决了。
我想知道,为什么会错呢?
谁能解答一下

#9


3楼方法是正确的
string类型和字符串注意要有'\0'
"abc"其实在默认后面有'\0'的,只是没用显式的写出来

string类中没用提供如下的赋值运算
string &operater=(char ch) ;
只提供了
string &operater=(const string &str) ;

所以如下赋值也是不安全的,注意字符串结尾必须有'0'
char a[] = {'a','b'} ;
string str2(a) ;

#10


引用 7 楼 fblgzdq 的回复:
不知道 c_str() 具体是什么功能?


 我这里是传参数
 难道是因为参数是 f(std::sting& a)
 然后我把line[3]传给了 string&
 f(line[3])
 然后错了?
 为什么会错呢?

参数类型不匹配啊,一个是string的引用类型,一个是char

#11


引用 10 楼 wanghao111 的回复:
引用 7 楼 fblgzdq 的回复:
 不知道 c_str() 具体是什么功能?


  我这里是传参数
  难道是因为参数是 f(std::sting& a)
  然后我把line[3]传给了 string&
  f(line[3])
  然后错了?
  为什么会错呢?


 参数类型不匹配啊,一个是string的引用类型,一个是char


那把char 传给 string的引用类型  除了 a.substr(2,1);
还有什么别的办法呢?
谢谢

#12


char放入string可以用push_back,因为string基本等于vector<char>
	string line="abcdefg";
string a;
a.push_back(line[3]);
另外注意,虽然你可以把'\0'放进string,但实际string并不需要'\0',它自己管理长度

#13


f(std::string& a)
{
}
a.substr(2,1);返回的是string,所以传给f()没问题
而line[3]是char,string并没有定义自动转换char到string的构造器,所以失败

#14


+=

#15


别的方法,也就是把string当作vector<char>来操作就行了,随便举个例子
void f(std::string& a)
{
cout << a << endl;
}

int main()
{
string line="abcdefg";
f(string(line.begin()+2, line.begin()+3));
return 0;
}

#16


string a="woods";
string b;
b=a.substr(3,1);

 cout<<b;<<endl    //b="o";

#17


应该用
b=a.at(3);

#18


需要将a先初始化

#include <iostream>
using namespace std; 
int main()
{
string line="abcdefg" ;
string a = ""; 
a = line[3];
cout << a.c_str() << endl;
return 0;
}

#19


建议完整看看C++ Primer 4th。
你这样学习,会存在大量盲区的。还是系统学习一下比较好

#20


应该用 
a=line.at(3); 

#21


引用楼主 fblgzdq 的回复:
c++把一个string 中的某一个位置上的字符传给另一个string如何实现?

 如
 stirng line=“abcdefg”;
 string a;

 要把 line的第3个给string a 应该如何做?
 a=line[3];
 报错说 char 不能转换成string。

我用c-free 3.5 没有报错啊

#22


a.push_back(line[3]);