| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5124 人关注过本帖, 1 人收藏
标题:请问这个str1为什么输出不了?
只看楼主 加入收藏
ke_liu
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:38
专家分:20
注 册:2020-1-24
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:35 
请问这个str1为什么输出不了?
下面这段程序我直接写"cout<<str1;",好像什么都没有输出;
而我直接这样写"cout<<str1[0]<<str1[1]<<……;",是可以输出的。
我也查了一下在C++中string类型的变量直接写名称是可以输出的,不知道为什么在这里就不行了
题目:有一字符串,包含n个字符。写一函数将此字符串中从第m个字符开始的全部字符复制成为另外一个字符串。
代码:
程序代码:
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
    string str;
    void Partial_replication(string);
    cout<<"请输入一个字符串:"<<endl;
    cin>>str; 
    Partial_replication(str);
    return 0;
}
void Partial_replication(string str)
{
    int StringLength(string str);
    string str1;
    int n,m,i=0; 
    char *p,*p1;
    n=StringLength(str);
    cout<<"请输入被复制的字符个数m,(m<"<<n<<"):" ;
    cin>>m;
    for(p=&str[m-1],p1=&str1[0];p<=&str[n-1];p++,p1++)
    *p1=*p;
    cout<<"被复制的部分字符串为:"<<str1<<endl;     
}
int StringLength(string str)
{
    char *p;
    int i=0;
    for(p=&str[0];*p!='\0';p++)
    i++;
    return i;
}

这是我的运行结果:
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 输出 字符串 str cout string 
2020-03-12 23:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:8 
str1 是空的,你怎么可以往里面写东西?
另外,从你的代码来看,你得卖本真正的C++书籍去学一下。

写一函数将此字符串中从第m个字符开始
cout<<"请输入被复制的字符个数m,(m<"<<n<<"):" ;
你自己说的两句话矛盾么,到底这个m是起始位置,还是被复制的字符个数?


程序代码:
#include <iostream>
#include <string>
using namespace std;

std::string foo( const std::string& s, size_t offset );

int main( void )
{
    cout << "请输入一个字符串:";
    string str;
    if( !(cin>>str) )
        return 1;

    cout << "请输入欲被复制的字符起始位置:";
    size_t idx;
    if( !(cin>>idx) )
        return 1;

    string result = foo(str, idx);
    cout << "被复制的部分字符串为:" << result << endl;
}

std::string foo( const std::string& s, size_t offset )
{
    if( offset < s.size() )
        return string(s, offset);
    return string();
}
输入 abc 和 0, 输出 abc
输入 abc 和 1, 输出 bc
输入 abc 和 2, 输出 c
输入 abc 和 3, 输出 空
输入 abc 和 4, 输出 空
……
2020-03-13 09:38
ke_liu
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:38
专家分:20
注 册:2020-1-24
收藏
得分:0 
回复 2楼 rjsp
这个str一开始也是空的,为什么就可以在str里写东西,而不可以在str1里写?
2020-03-13 13:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
回复 3楼 ke_liu
cin>>str; 这个operator >>会调用str的resize分配空间
而你的代码 p1=&str1[0] 则直接使用不存在的内存
2020-03-13 13:50
ke_liu
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:38
专家分:20
注 册:2020-1-24
收藏
得分:0 
回复 4楼 rjsp
谢谢,我还想问一下为什么我这样写:cout<<str1[0]<<str1[1]……;是可以输出来呢?
2020-03-13 13:58
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:6 
回复 5楼 ke_liu
我觉得你应该疑惑解答人的代码,
比如
程序代码:
if( offset < s.size() )
        return string(s, offset);//这一句刷了我三观,比大小然后返回参数就能得到结果了,
    return string();


把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-13 14:29
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
程序代码:
//这个你应该能看懂
#include <iostream>

using namespace std;
//输入字符串,输入数字,从数字后输入字符
//知道字符串的长度,然后输入长度后面的字符
int main()
{
    string a={};
    cin>>a;//字符
    size_t b=a.size();
    size_t c=0;
    cin>>c;//要输入数字
    for(size_t i=c;i<b;++i)
        cout<<a[i];//打印数字后的字符
    return 0;
}



把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-13 15:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
以下是引用ke_liu在2020-3-13 13:58:49的发言:
谢谢,我还想问一下为什么我这样写:cout<<str1[0]<<str1[1]……;是可以输出来呢?
对于错误的代码(未定义行为),讨论它的输出是没有意义的。

如果一定要说的话,
对于 cout<<str1<<endl,你的代码没有修改 str1 的size,所以str1依然认为自己是空字符串




2020-03-13 15:34
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:6 
只能算是作一半.

[此贴子已经被作者于2020-3-14 13:51编辑过]

2020-03-13 16:30
ke_liu
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:38
专家分:20
注 册:2020-1-24
收藏
得分:0 
回复 8楼 rjsp
你所说的这个“str1的size”,指的是str1长度吗?如果是的话,这个string类型的变量的长度不是不需指定,只随其中输入的字符串长度而改变的吗?
如果不是我所认为的那样的话,那就先这样吧。
谢谢!
2020-03-13 17:56
快速回复:请问这个str1为什么输出不了?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018463 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved