提取或(甚至更好)更改char *字符串的第一个符号

时间:2017-08-06 13:41:03

标签: c++

  1. 有没有办法提取字符串的第一个(或第二个,第三个,无论哪个)符号,只使用指向它的char *指针?

    char* str = "abcde";
    char* symbol;
    
    // Some actions
    
    std::cout << *symbol; // a in output
    
  2. 有没有办法改变字符串的某个符号,只使用一个char *指针?

    char* str = "abcde";
    
    // Some actions;
    
    std::cout << str; // 1bcde in output
    
    UPD:请注意,根据给出的任务,我应该使用char *,而不是char [](尽管如果它不是任务,我肯定会使用char [])。

    < / LI>

3 个答案:

答案 0 :(得分:1)

你遇到的问题是这一行

char* str = "abcde";

是错误的,编译器甚至应该抱怨。它应该是

   const char[6] str = "abcde";
// ^^^^^

因为你无法改变文字中的任何内容 或者干脆做:

   const char[/* length is implicit */] str = "abcde";

无论如何,你最终会得到一个const char[6]数组变量。

  
      
  1. 有没有办法提取字符串的第一个(或第二个,第三个,无论哪个)符号,只使用指向它的char *指针?
  2.   

要访问单个字符,您只能使用索引...

std::cout << str[0] << std::endl; // prints a
  
      
  1. 有没有办法改变字符串的某个符号,只使用一个char *指针?
  2.   

...但你无论如何都无法改变这个价值。

答案 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
  1. 修改字符串:

    char * str =“abcde”;

    str [0] ='1';

    std :: cout&lt;&lt;海峡; //输出中的1bcde

  2. 这是一旦你有一个可修改的字符串。我猜你真的想知道如何正确访问字符串中的特定点并使用或修改它,而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);

在我的实际任务中,我只需要更改字符串的第一个符号,完成任务。