c++ - 使用指针指向字符串中的某些字符

标签 c++ string pointers substring

#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/

相关文章:

c++ - 我如何将一个 int 添加到一个字符串

c++ - removeWidget() 不工作

java - 从特定单词后的字符串中获取子字符串

java - 在 Java 中将字符串分成多个部分的安全方法是什么?

c - 为什么我在使用双指针作为二维数组的参数时得到 'segmentation error'?

c: 在函数中使用指针作为输入时,使用 *pointer++ 递增指针值不起作用

c - 在 C 中分配二维数组

c++ - OpenCV imshow 错误? - 像素颜色

C++11 没有匹配函数来调用‘std::vector

python - 如何在python中打印匹配的单词