C++ 需要C+的建议+;指针和字符数组(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',那么它看起来像这样: +---+---+---+
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;
}