vector问题

zhkjoy 2009-09-18 09:46:14
我想实现一个读一个字符串进vector里面,不知道怎么就莫名奇妙出错了,大家帮我来看看。

vector<char> InputChars(void)
{
string schar;
vector<char> inChars;

cout<<"文字列を入力してください:"<<endl;
cin>>schar;

cout<<schar.length();
for (int i=0; i<schar.length(); i++)
{
inChars.push_back(schar[i]);
}

return inChars;
}



好像就是这个函数的问题。请各位高手指教。
...全文
187 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhkjoy 2009-09-18
  • 打赏
  • 举报
回复
谢谢各位了,原来还是初始化的问题。
下次注意了。
zhkjoy 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 adlay 的回复:]
Encrypt 函数有问题啊, pwdChars 没有初始化就使用 pwdChars[i] 了
[/Quote]

谢谢了,好像就是这问题
cphj 2009-09-18
  • 打赏
  • 举报
回复
原来问题在这儿

vector<char> Encrypt(const vector<char> txtChars)
{
vector<char> pwdChars;

for (int i=0; i<txtChars.size(); i++)
{
//pwdChars[i] = txtChars[i] + KEY[i%7]; //这句话导致内存错误,因为pwdChars是空vector
pwdChars.push_back(txtChars[i] + KEY[i%7]); //改成这样就对了
if(pwdChars[i] > 122)
pwdChars[i] -= 91;
}

return pwdChars;
}
www_adintr_com 2009-09-18
  • 打赏
  • 举报
回复
Encrypt 函数有问题啊, pwdChars 没有初始化就使用 pwdChars[i] 了
zhkjoy 2009-09-18
  • 打赏
  • 举报
回复
所以应该不是下面的函数的问题
zhkjoy 2009-09-18
  • 打赏
  • 举报
回复

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
const int KEY[7] = {4, 9, 6, 2, 8, 7, 3};
vector<char> InputChars(void);
vector<char> Encrypt(const vector<char> txtChars);

int main()
{
vector<char> inChars;
vector<char> pwdChars;
inChars = InputChars();
cout << "dddddd";
pwdChars = Encrypt(inChars);
return 0;
}

vector<char> InputChars(void)
{
string schar;
vector<char> inChars;

cout<<"文字列を入力してください:"<<endl;
cin>>schar;

cout<<schar.length();
for (int i=0; i<schar.length(); i++)
{
inChars.push_back(schar[i]);
}

cout<<"aaaaaa";
return inChars;
}

vector<char> Encrypt(const vector<char> txtChars)
{
vector<char> pwdChars;

for (int i=0; i<txtChars.size(); i++)
{
pwdChars[i] = txtChars[i] + KEY[i%7];
if(pwdChars[i] > 122)
pwdChars[i] -= 91;
}

return pwdChars;
}



现在把代码简化了,出的问题是下面的情况:
失落的凡凡 2009-09-18
  • 打赏
  • 举报
回复
应该跟wchat_t没关系 估计就是return出问题了 你改成这样
void InputChars(vector <char>& inChars)
然后调用的时候直接把要保存的vector<char>对象当参数传进去就行了
cphj 2009-09-18
  • 打赏
  • 举报
回复
顶楼上

我也验证了,输入英文没有问题

是日文的问题,应该用宽字符
phoex 2009-09-18
  • 打赏
  • 举报
回复
函数返回的值,又不是指针,没有什么问题呀!
你能说一下出现什么错误吗?
你是用的小日本文字,而使用char类型,有可能在编码有点问题,std::string有一个std::wstring的宽字符版本可以来处理非Ansi编码。
www_adintr_com 2009-09-18
  • 打赏
  • 举报
回复
调用的地方看起来也没有问题,出的是什么异常?
不会是内存不够分配出错了吧...

另外,你的编译器是?
拉卡尼休 2009-09-18
  • 打赏
  • 举报
回复
不应该!能具体说你的错误或者把代码全贴出来?
zhkjoy 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cphj 的回复:]

另外,那个vector <char>看着有点怪,string就是基本等价于vector <char>的,为什么要费力把string schar转成vector <char> inChars??
[/Quote]
因为最外层是这么定义的,我想外面应该没问题。

vector<char> inChars;
//其他定义
inChars = InputChars();
cout<<"aaaaa"; //这句话都没走到

//下面的操作更没走到

现在里面加了个输出:

vector<char> InputChars(void)
{
string schar;
vector<char> inChars;

cout<<"文字列を入力してください:"<<endl;
cin>>schar;

cout<<schar.length();
for (int i=0; i<schar.length(); i++)
{
inChars.push_back(schar[i]);
}

cout<<"aaaaaa";//这句话能显示,然后就出异常了
return inChars;
}
失落的凡凡 2009-09-18
  • 打赏
  • 举报
回复
把函数改成void型 然后把vector的引用当作形参传进去
拉卡尼休 2009-09-18
  • 打赏
  • 举报
回复
LZ,你原来代码应该没问题的,你返回的是vector又不是它的引用。
能说一下你出什么错了吗?
cphj 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhkjoy 的回复:]
引用 1 楼 wuyu637 的回复:
好好看看局部变量和全局变量的区别。


是因为局部变量不能返回的原因么?
是这样的话,怎么该才好呢
[/Quote]

返回局部变量没有问题,关键看你上级函数怎么用的返回值,贴出来吧

另外,那个vector<char>看着有点怪,string就是基本等价于vector<char>的,为什么要费力把string schar转成vector<char> inChars??

www_adintr_com 2009-09-18
  • 打赏
  • 举报
回复
这个函数本身没问题,看你调用的地方是不是有问题.
zhkjoy 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cphj 的回复:]
更新一下代码

C/C++ codevector<string> InputChars(void)
{string schar;
vector<string> inChars;

cout<<"文字列を入力してください:"<<endl;
cin>>schar;

inChars.push_back(schar);return inChars;
}
[/Quote]

我想输入的字符串,一个一个进向量里面。只输入一个字符串。

例如输入:abcdefg
进到向量里面去是
inChars[0] = 'a'
inChars[1] = 'b'
...
zhkjoy 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cphj 的回复:]
改成vector <string>就对了

C/C++ codevector<string> InputChars(void)
{string schar;
vector<string> inChars;

cout<<"文字列を入力してください:"<<endl;
cin>>schar;

cout<<schar.length();for (int i=0; i<schar.length(); i++)
{
inChars.push_back(schar);
}return inChars;
}
[/Quote]


我是想每个vector中存放一个字符。这样可以么?
cphj 2009-09-18
  • 打赏
  • 举报
回复
更新一下代码

vector<string> InputChars(void)
{
string schar;
vector<string> inChars;

cout<<"文字列を入力してください:"<<endl;
cin>>schar;

inChars.push_back(schar);

return inChars;
}
zhkjoy 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyu637 的回复:]
好好看看局部变量和全局变量的区别。
[/Quote]

是因为局部变量不能返回的原因么?
是这样的话,怎么该才好呢
加载更多回复(3)

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧