有没有办法提取字符串的第一个(或第二个,第三个,无论哪个)符号,只使用指向它的char *指针?
char* str = "abcde";
char* symbol;
// Some actions
std::cout << *symbol; // a in output
有没有办法改变字符串的某个符号,只使用一个char *指针?
char* str = "abcde";
// Some actions;
std::cout << str; // 1bcde in output
UPD:请注意,根据给出的任务,我应该使用char *,而不是char [](尽管如果它不是任务,我肯定会使用char [])。 < / LI>
醇>
答案 0 :(得分:1)
你遇到的问题是这一行
char* str = "abcde";
是错误的,编译器甚至应该抱怨。它应该是
const char[6] str = "abcde";
// ^^^^^
因为你无法改变文字中的任何内容 或者干脆做:
const char[/* length is implicit */] str = "abcde";
无论如何,你最终会得到一个const char[6]
数组变量。
- 有没有办法提取字符串的第一个(或第二个,第三个,无论哪个)符号,只使用指向它的char *指针?
醇>
要访问单个字符,您只能使用索引...
std::cout << str[0] << std::endl; // prints a
- 有没有办法改变字符串的某个符号,只使用一个char *指针?
醇>
...但你无论如何都无法改变这个价值。
答案 1 :(得分:0)
好的,您提出问题并提供示例代码。正如其他人所提到的,存在一些不匹配。
在您的示例代码中,您写道:
char* str = "abcde";
无法更改字符串文字(并且它被分配给非const的指针;这是一个错误,正如其他人所提到的那样。)
但是你解释说你被赋予了一个需要改变它的任务!
所以,要么: 你给我们的榜样并没有真正反映出这个任务 要么 你误解了这个任务 要么 3.任务不正确。
也许任务期望你使用char *,你决定自己初始化它。
如果是这样......
您需要定义一个可以修改的char *。例如:
char str1[MAX_CHARS]; // you'll have to define MAX_CHARS as something reasonable
strcpy(str1, "abcde"); // you'll have to make sure that str1 is large enough
char * str = str1;
这只是一个例子。如果需要,可以使用“new”。
在堆上分配str一旦你有一个可修改的字符串,你可以做你提出的事情: 1.
char* symbol = &str[0];
std::cout << *symbol; // a in output
或更直接地:
std::cout << str[0]; // a in output -- add an end of line if you need it
修改字符串:
char * str =“abcde”;
str [0] ='1';
std :: cout&lt;&lt;海峡; //输出中的1bcde
这是一旦你有一个可修改的字符串。我猜你真的想知道如何正确访问字符串中的特定点并使用或修改它,而constness在你的例子中只是一个错误。
答案 2 :(得分:0)
我自己刚刚找到了问题的答案。
我绝对可以通过[]运算符从char *中提取符号。
char* str = "abcde";
std::cout << str[0]; // a
std::cout << str[1]; // b
// and so on
2。我可以通过以下操作使用char *指针更改字符串的第一个符号:
char* str = "abcde";
char* sym = "1";
str++;
char* rest = str;
str = (char*) malloc((strlen(sym) + strlen(rest)) * sizeof(char));
strcpy(str, sym);
strcat(str, rest);
在我的实际任务中,我只需要更改字符串的第一个符号,完成任务。