数组中的反转字符

时间:2014-03-06 12:45:26

标签: c arrays pointers

例如,我需要将“巴黎”改为“siraP”......

我的主要人物:

int main(void)
{
    char w1[] = "Paris";
    ReverseWord(w1);
    printf("The new word is: %s",w1);
    return0;
}

和我的职能:

void ReverseWord(char *Str)
{
     int counter=0;
     for(int i=0; *(Str+i)!='\0'; i++)
          counter++;

     int length = counter-1;

     char temp[length];

     for(int j=0; temp[j]=='\0'; j++)
          temp[j]=Str[length-j];
}

现在我在temp []中有我的反转词。 我需要把它放在我的指针* Str。 我该怎么办?

由于

5 个答案:

答案 0 :(得分:3)

如果你想使用temp必须你的功能就像这样

void ReverseWord(char *Str)
{
    int i,j;

    if(str)
    {
      int length=strlen(Str);
      char temp[length+1];

      for( j=0; j<length; j++)
          temp[j]=Str[length-1-j];

      temp[j]='\0';

      strcpy(Str,temp);
   }

}

不使用temp如下

void ReverseWord(char *Str)
{
    int end= strlen(Str)-1;
    int start = 0;

    while( start<end )
    {
        Str[start] ^= Str[end];
        Str[end] ^= Str[start];
        Str[start]^= Str[end];

        ++start;
        --end;
    }
}

答案 1 :(得分:1)

void ReverseWord(char *Str)
{
    size_t len;
    char temp, *end;

    len = strlen(Str);
    if (len < 2)
        return;

    end = Str + len - 1;
    while (end > Str)
    {
        temp = *end;
        *end-- = *Str;
        *Str++ = temp;
    }
}

答案 2 :(得分:0)

还有一个选择,这次是危险的malloc(3)。

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

char *rev(char s[]) {
  char *buf = (char *)malloc(sizeof(char) * strlen(s));
  int i, j;

  if(buf != NULL)
    for(i = 0, j = strlen(s) - 1; j >= 0; i++, j--)
      buf[i] = s[j];

  return buf;
}

int main(int argc, char **argv) {
  printf("%s\n", rev(argv[1]));
  return 0;
}

使用"foo bar foobar baz"运行并返回zab raboof rab oof

~/tmp$ ./a.out "foo bar foobar baz"
zab raboof rab oof

答案 3 :(得分:0)

我认为你可以研究两种算法:

  1. C字符串长度计算:c字符串的结尾为'\ 0'
  2. 如何反转c字符串
  3. 如果你需要测试代码,你应该在堆或strack中分配测试字符串。如果您编写文字字符串,则可能会遇到总线错误,因为文字字符串保存在文本区域中,这是一个只读存储器。

    以下是演示:

    #include <stdio.h>
    #include <stdlib.h>
    
    void reverse_string(char* str)
    {
        size_t len;
        char tmp, *s;
        //Get the length of string, in C the last char of one string is \0
        for(s=str;*s;++s) ;
        len = s - str;
    
        //Here we use the algorithm for reverse the char inplace.
        //We only need a char tmp place for swap each char
        s = str + len - 1;
        while(s>str){
            tmp = *s;
            *s = *str;
            *str = tmp;
            s--;
            str++;
        }
    }
    
    int main()
    {
        char* a = "abcd";
        //Here "abcd" will be saved in READ Only Memory. If you test code, you will get a bus error.
        char* b = (char*)calloc(1,10);
        strcpy(b,a);
        reverse_string(b);
        printf("%s\n",b);
    
        a = "abcde";
        strcpy(b,a);
        reverse_string(b);
        printf("%s\n",b);
    }
    

答案 4 :(得分:-1)

你只需按照代码

即可
for(int k=0;k<strlen(temp);k++)
     {
        Str[k]=temp[k];
     }