C++ 需要C+的建议+;指针和字符数组(C字符串)

C++ 需要C+的建议+;指针和字符数组(C字符串),c++,arrays,string,pointers,character-arrays,C++,Arrays,String,Pointers,Character Arrays,第一篇文章,我需要以下问题的帮助 “我们有一个具有三个参数的函数:一个指向字符数组(也称为C字符串)的指针,以及两个指向特定字符的指针(我们假设它们指向C字符串中的字符) void stringpointer操作(char*str,char*firstPtr,char*secondPtr){ 如果我没有看错你的问题,如果你有字符串“你好,世界!”,那么如果firstPtr指向“你好”中的第二个'l',并且secondPtr指向“世界!”中的'w',那么它看起来像这样: +---+---+---+

第一篇文章,我需要以下问题的帮助

“我们有一个具有三个参数的函数:一个指向字符数组(也称为C字符串)的指针,以及两个指向特定字符的指针(我们假设它们指向C字符串中的字符)

void stringpointer操作(char*str,char*firstPtr,char*secondPtr){

如果我没有看错你的问题,如果你有字符串“你好,世界!”
,那么如果
firstPtr
指向
“你好”
中的第二个
'l'
,并且
secondPtr
指向
“世界!”
中的
'w'
,那么它看起来像这样:

+---+---+---+---+---+---+---+---+---+---+---+---+----+ | H | e | l | l | o | | w | o | r | l | d | ! | \0 | +---+---+---+---+---+---+---+---+---+---+---+---+----+ ^ ^ ^ | | | str firstPtr secondPtr +---+---+---+---+---+---+---+---+---+---+---+---+----+ |H | e | l | l | o | w | o | r | l | d |!\0| +---+---+---+---+---+---+---+---+---+---+---+---+----+ ^ ^ ^ | | | str firstPtr secondPtr 因此,要从例如
firstPtr
中打印字符串的“其余部分”,上图应该表明您可以像打印任何其他字符串一样打印它


图像还应该清楚地说明如何获得
firstPtr
secondPtr
之间的字符数,只需减去它们:
secondPtr-firstPtr

我不明白在函数中不使用第一个参数时声明第一个参数有什么意义k型

void stringPointerOperation( const char *str, 
                             const char *firstPtr, 
                             const char *secondPtr )
{
    std::cout << firstPtr << std::endl;

    if ( secondPtr < firstPtr )
    {
        const char *p = firstPtr;
        firstPtr = secondPtr;
        secondPtr = p;
    }

    std::ptrdiff_t n = secondPtr - firstPtr;

    std::cout << "There are " << n 
              << " characters between pointers " 
              << ( const void * )firstPtr 
              << " and "
              << ( const void * )secondPtr
              << std::endl;
}
Type std::ptrdiff_t只是一些有符号int类型的typedef。通常它是
int
。因此,如果需要,可以将
std::ptrdiff_t
替换为
int

如果这些声明

std::cout << str << std::endl;
std::cout << "First character=" << *firstPtr << std::endl;
std::cout << "Second character =" << *secondPtr << std::endl;

std::你使用任何类型的循环都是对的。你最好的尝试是什么?我不明白当第一个参数实际上没有在函数中使用时,声明它有什么意义。"--再看一次。@Jim Balter我不明白你想说什么。OP引用的问题陈述包括
cout@Jim Balter我回答了他的问题A和B。作业中没有写必须输出字符串iteslf。但无论如何,他可以在我展示的函数中插入他的陈述。没有y问题。我刚才向您解释了为什么包含第一个参数……没有它,讲师的示例代码将无效。并且没有任何地方说明应该删除现有代码;合理的假设是,输出A和B值的代码应该附加到现有输出中。
#include <iostream>
#include <cstddef>

void stringPointerOperation( const char *str, 
                             const char *firstPtr, 
                             const char *secondPtr )
{
    std::cout << firstPtr << std::endl;

    if ( secondPtr < firstPtr )
    {
        const char *p = firstPtr;
        firstPtr = secondPtr;
        secondPtr = p;
    }

    std::ptrdiff_t n = secondPtr - firstPtr;

    std::cout << "There are " << n 
              << " characters between pointers " 
              << ( const void * )firstPtr 
              << " and "
              << ( const void * )secondPtr
              << std::endl;
}

int main() 
{
    const char *s = "My name is Lewis Russell";

    stringPointerOperation( s, s + 11, s + 16 );

    return 0;
}
Lewis Russell
There are 5 characters between pointers 0x8048b7a and 0x8048b7f
std::cout << str << std::endl;
std::cout << "First character=" << *firstPtr << std::endl;
std::cout << "Second character =" << *secondPtr << std::endl;
void stringPointerOperation( const char *str, 
                             const char *firstPtr, 
                             const char *secondPtr )
{
    std::cout << str << std::endl;
    std::cout << "First character=" << *firstPtr << std::endl;
    std::cout << "Second character =" << *secondPtr << std::endl;

    std::cout << firstPtr << std::endl;

    if ( secondPtr < firstPtr )
    {
        const char *p = firstPtr;
        firstPtr = secondPtr;
        secondPtr = p;
    }

    std::ptrdiff_t n = secondPtr - firstPtr;

    std::cout << "There are " << n 
              << " characters between pointers " 
              << ( const void * )firstPtr 
              << " and "
              << ( const void * )secondPtr
              << std::endl;
}