程序输出无法解释

nullah 2008-11-04 08:10:43

#include <iostream>
#include <string>
using namespace std;

int main()
{

const int n=10;//文件数;

string s[n];//文件名存放

for(int i=0; i<n; i++)
{
s[i] = "iiii1234567"+i;//+'.'+'t'+'x'+'t';
cout << s[i] << endl;;
}

return 0;
}


output:
iiii1234567
iii1234567
ii1234567
i1234567
1234567
234567
34567
4567
567
67
请按任意键继续. . .
...全文
149 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
nullah 2008-11-04
  • 打赏
  • 举报
回复
呵呵,我是看别的帖子 看到这处莫名其妙的
[Quote=引用 12 楼 yx07004212 的回复:]
根据楼主的意思可能是想依次实现iii12345670.txt,iii12345671.txt,.....这种形式的文件名

#include <iostream>
#include <string>
using namespace std;

int main()
{

const int n=10;//文件数;
string s[n] ;//文件名存放
char p[3];

for(int i=0; i <n; i++)
{

itoa(i,p,10);
s[i] = "iiii1234567.txt";
s[i].insert(11,p);
cout < < s[i] < < endl;
}


[/Quote]
yx07004212 2008-11-04
  • 打赏
  • 举报
回复
根据楼主的意思可能是想依次实现iii12345670.txt,iii12345671.txt,.....这种形式的文件名

#include <iostream>
#include <string>
using namespace std;

int main()
{

const int n=10;//文件数;
string s[n] ;//文件名存放
char p[3];

for(int i=0; i<n; i++)
{

itoa(i,p,10);
s[i] = "iiii1234567.txt";
s[i].insert(11,p);
cout << s[i] << endl;
}

return 0;
}
hznat 2008-11-04
  • 打赏
  • 举报
回复
s[i] = "iiii1234567"+i

正如楼主自己所说,"iiii1234567"是一个字符数组,它是一个指针,指向存放iiii1234567\0内容的一块内存,这个指针+1,指的就是iii1234567\0,即指向原来的字符数组的第二个字符的地址。

所以,这样做就会出现楼主看到的现象。
OenAuth.Net 2008-11-04
  • 打赏
  • 举报
回复
字符串实际就是地址,当你s[i]="...."+i时,就是移动了指针,可以试试,s[i]="..."+itoa(i);
lijinfenghust 2008-11-04
  • 打赏
  • 举报
回复
在c++里面 ,字符串不是编译器内置类型。换句话说
不是类制类型的,+ - 啥的 都是通过重载运算符实现的

那个之所以不成功,说明+ -的肯定是重载了运算符的,
不然编译就通不过了。只不过 不是按照你的意思重载的自定义运算符了
建议跟踪代码到STL库里面看看,看都干了啥?^_^
kiffa 2008-11-04
  • 打赏
  • 举报
回复
"iiii1234567"是字符串常量,其字面值就是地址,即const char[],所以s[i] = "iiii1234567" + i等价于下面语句:

char *p = "iiii1234567";
s[i] = p + 1;

故有如上输出。
OenAuth.Net 2008-11-04
  • 打赏
  • 举报
回复
汗,是string数组,看错了,晕。工作一天,累的字都看错了,不好意思
OenAuth.Net 2008-11-04
  • 打赏
  • 举报
回复
在c++中字符数组不能直接用+号来操作,可以用strcat函数来追加
而且i还必须转成字符类型。使用itoa()函数
现在没有编译器,手写一个吧

#include <iostream>
#include <string>
using namespace std;

int main()
{

const int n=10;//文件数;

string s[n];//文件名存放

for(int i=0; i<n; i++)
{
strcat(s,itoa(i));//可能有错,到MSDN上找一下具体的参数
cout << s[i] << endl;;
}

return 0;
}
nullah 2008-11-04
  • 打赏
  • 举报
回复
s[n]是个字符串数组
你解释的我不是很明白?
再说就算不支持,怎么会有那种输出呢?
[Quote=引用 4 楼 anglecloudy 的回复:]
字符数组不支持,
你可以用string 类,或者strcat(应该是吧)
[/Quote]
OenAuth.Net 2008-11-04
  • 打赏
  • 举报
回复
字符数组不支持,
你可以用string 类,或者strcat(应该是吧)
nullah 2008-11-04
  • 打赏
  • 举报
回复
解释一下
[Quote=引用 2 楼 lijinfenghust 的回复:]
"iiii1234567"+i?
c++ 不支持把
[/Quote]
lijinfenghust 2008-11-04
  • 打赏
  • 举报
回复
"iiii1234567"+i?
c++ 不支持把
nullah 2008-11-04
  • 打赏
  • 举报
回复
怎么回事这个输出呢
如果s[i] = "iiii1234567"+i+'.'+'t'+'x'+'t';
输出跟莫名其妙

65,210

社区成员

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

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