C++修改字符串中的字符

r1wp621o  于 2023-08-09  发布在  其他
关注(0)|答案(2)|浏览(146)

如果我想改变一个字符串中的一个字符,我可以这样做:

#include <iostream>
#include <string>
using namespace std;

int main() {
  string mystring = "Hello";
  mystring[0] = 'T';
  cout << mystring;
  return 0;
}

字符串
如果我想用另一个函数改变字符串中的i个字符:

#include <iostream>
#include <string>
using namespace std;

void changeStr(string* mystring);

int main() {
  string mystring = "Hello";
    changeStr(&mystring);
  cout << mystring;
  return 0;
}

void changeStr(string* mystring)
{
    mystring[0] = 'T';
}


为什么不工作?整个字符串都变成了“T”。我是编程新手,在指针/地址方面仍然有一些问题。我知道一个char(char[])数组是指向它的第一个索引的指针。这也适用于字符串吗?我该怎么办?

xoefb8l8

xoefb8l81#

对于初学者来说,通过指向对象的指针将std::string类型的对象传递给函数没有意义。您可以通过引用传递它。所以这个函数看起来像

void changeStr(string &mystring)
{
    mystring[0] = 'T';
}

字符串
相应地,该函数的调用方式如下

changeStr(mystring);


至于你的问题,那么首先你需要解引用指针,然后才能应用下标运算符

void changeStr(string* mystring)
{
    ( *mystring )[0] = 'T';
}


或者你可以写

void changeStr(string* mystring)
{
    mystring->operator []( 0 ) = 'T';
}


请注意,后缀下标运算符的优先级高于解引用运算符。
至于你演示程序中的语句内的函数

mystring[0] = 'T';


然后实际上它使用赋值运算符将字符'T'赋值给字符串

basic_string& operator=(charT c);


而不是仅分配字符串的第一个字符。
也就是说,在此语句之后,字符串将等于"T"
如果在main中写入也是一样的

mystring = 'T';


表达式*mystringmystring[0](其中mystring的指针类型为std::string *)是等效的。在函数中你甚至可以写

mystring[0][0] = 'T';


代替了

( *mystring )[0] = 'T';


虽然正如我前面指出的,通过引用传递字符串要好得多。

webghufk

webghufk2#

你不需要传递指针。简单地通过引用传递它(引用将更新值),如果你通过指针传递它,然后返回字符串而不是void。更好的选择通过引用传递

#include <iostream>
 #include<string>
 using namespace std;
 void changeStr(string &mystring);

 int main() {
 string mystring = "Hello";
  changeStr(mystring);
 cout << mystring;
 return 0;
}

void changeStr(string &mystring)
{
  mystring[0] = 'T';
}

字符串

相关问题