【问题标题】:how to replace character in string如何替换字符串中的字符
【发布时间】:2023-04-09 23:58:01
【问题描述】:
int main(){
 
   char* str = "bake", *temp = str;
   char alpha [] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
       for (int i = 0 ; temp[i] != '\0'; i++) {
             for (int j = 0; alpha[j] != '\0'; j++) {
                temp[i] = alpha[j];
                printf("%s\n",temp);
              }
          temp = str;
       }
   return 0;
}

为什么我要尝试替换掉到我的特定位置的角色? 我希望它像那样打印我


  i = 0 (index 0 he change only the first char).
    aake
    bake
    cake
    dake
    ....
    i = 1(index 1 he change only the second char).
    bake
    bbke
    bcke
    bdke
    ....

我不明白为什么temp[i] = alpha[j] 不工作......我需要做的是我可以改变字符。 非常感谢您的帮助

![在此处输入图片描述][1] [1]:https://i.stack.imgur.com/v0onF.jpg

【问题讨论】:

  • 对于初学者来说,更改由字符串文字生成的字符串是未定义的行为。 char *str = "bake"; 应该是 char str[] = "bake";
  • 无法修改文字(常量)字符串。请注意,您的算法尝试用 alpha 的最后一个非空字符填充 temp,所以 zzzz...zz
  • *temp = str 看起来很奇怪,并且与以后如何使用temp 不符。你的意思是使用char *temp = strdup(str);
  • Re "alpha[j] != '\0'", '\0'不在alpha中的任何地方
  • 我的最后一条评论解释了您遇到的错误

标签: c string char character


【解决方案1】:

正如 cmets 中所说,您的代码中有几个错误。首先,正如bruno 所述,您不能修改文字字符串。其次,当您编写 *temp=str 时,您是在说“指针 temp 现在指向与 str 相同的地址”,简而言之,这样做,如果您修改 temp 中的数组,您也将修改 str 中的数组,并且反之亦然,因为它们是相同的。

下面你有一个可能的解决方案,使用 malloc 在 temp 中创建一个新数组,使用 strcpy 在每个外部循环后将 str 复制到 temp


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){

   char str[]= "bake",*temp;
   temp=malloc((strlen(str)+1)*sizeof(char));
   strcpy(temp,str);
   char alpha [] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
   for (int i = 0 ; temp[i] != '\0'; i++) {
       for (int j = 0; alpha[j] != '\0'; j++) {
          temp[i] = alpha[j];
          printf("%s\n",temp);
      }
       strcpy(temp,str);
   }
    
   return 0;
}

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多