String Scramble - 替换不正常工作的字符

时间:2014-03-06 21:28:06

标签: c string replace

int main(int argc, char *argv[])
{
  printf("------------------------\n");
  printf("WELCOME TO THE SCRAMBLER\n");
  printf("------------------------\n\n");

  char userString[21];
  printf("Please input a String :> ");
  scanf("%s", userString);
  printf("\n\nTo cancel, please press the # key\n\n");

  char mytarget[2];
  char myreplace[2];

  while(1)
  {
          bool notfoundFlag = false;
          printf("Target : ");
          scanf("%s", &mytarget[0]);

          if(mytarget[0] == '#')
          {
                    break;
          }        

          printf("Replace with : ");
          scanf("%s", &myreplace[0]);

          int j;              
          for(j = 0; userString[j] !='\0'; j++)
          {
                if(userString[j] != mytarget[0])
                {
                                 printf("Character not found, try again\n\n");
                                 notfoundFlag = true;
                                 break;
                }
                break;
          }
          if(notfoundFlag)continue;
          printf("Replacing %s with %s\n", &mytarget[0], &myreplace[0]);  

          char newStr[21];             
          newStr[21] = userString[21];
          int i;
          for(i = 0; newStr[i] != '\0'; i++)
          {
                if(newStr[i] == mytarget[0])
                {
                                 newStr[i] = myreplace[0];
                }
          }

          printf("\nWord is : \" %s \" \n\n", &newStr);
}

printf("\n\n");
system("PAUSE");    
return 0;

我遇到的问题是,在我进入mytarget和myreplace之后,当字符串混乱时,我会返回乱码,我不知道我做错了什么,有人可以帮助我吗?我是编程新手,也是C语言的新手(以Java开头)

1 个答案:

答案 0 :(得分:0)

您无法在C中以这种方式复制字符串。使用此功能可以最大限度地将一个char从一个数组复制到另一个数组。但在这种情况下,很可能甚至不会发生这种情况,因为索引21不在您的阵列中。

newStr[21] = userString[21];

将其替换为

strcpy(newStr, userString);

此循环也是错误的,只要userString的第一个字符等于目标结果

,它就会给出想要的结果
      for(j = 0; userString[j] !='\0'; j++)
      {
            if(userString[j] != mytarget[0])
            {
                             printf("Character not found, try again\n\n");
                             notfoundFlag = true;
                             break;
            }
            break;
      }

用类似的东西重写它:

          for(j = 0; userString[j] !='\0'; j++)
          {
                if(userString[j] == mytarget[0])
                {
                                 printf("Character found\n\n");
                                 found = true;
                                 break;
                }
          }
          if(!found)continue;

并在&声明

中删除newStr之前的printf
printf("\nWord is : \" %s \" \n\n", newStr);