#include<iostream>
using namespace std;
int main()
{
char s1[80]={"This is a developed country."};
char *s2[8];
s2[0]=&s1[10];
cout<<*s2; //Predicted OUTPUT: developed
// Actual OUTPUT: developed country.
return 0;
}
我想要 cout<<*s2;应该只打印其中的字母 {"developed"} ,所以我将 *s2[8] 长度设置为 8 个字符。我该怎么做才能使变量 cout<<*s2 最多只能打印 8 个字符的长度。我正在使用 dmc、lcc 和 OpenWatcom 编译器。这只是我使用字符串数据类型的其他更大程序的一小部分,所以我现在能做什么,非常感谢您回答我的问题:)
最佳答案
s2
是指向 char
的指针的长度为 8 的数组。您正在使它的第一个元素指向从位置 10 开始的 s1
。仅此而已。您没有使用该数组的其余元素。因此 s2
的长度是无关紧要的。
你可以这样做:
char* s2 = &s1[10];
如果你想从 s1
的一部分创建一个字符串,你可以使用 std::string
:
std::string s3(s1+10, s1+19);
std::cout << s3 << endl;
请注意,这会分配自己的内存缓冲区并保存拷贝或原始字符序列。如果您只想查看另一个字符串的一部分,您可以轻松实现一个包含指向原始字符串的开始和结束指针的类。这是一个粗略的草图:
struct string_view
{
typedef const char* const_iterator;
template <typename Iter>
string_view(Iter begin, Iter end) : begin(begin), end(end) {}
const_iterator begin;
const_iterator end;
};
std::ostream& operator<<(std::ostream& o, const string_view& s)
{
for (string_view::const_iterator i = s.begin; i != s.end; ++i)
o << *i;
return o;
}
然后
int main()
{
char s1[] = "This is a developed country.";
string_view s2(s1+10, s1+19);
cout << s2 << endl;
}
关于c++ - 使用指针指向字符串中的某些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31539613/