c - 字符串反转而不改变原始字符串

标签 c string

所以这里似乎有太多的字符串反转问题,但我想做的具体问题似乎没有涵盖。我这样做只是为了复习 C 并没有什么重要意义。我想达到的标准,

1.编写一个函数来反转字符串

2.不会改变原作

3.必须只接受原始字符串作为参数

4.不会使用现有的字符串反转函数

我最初编写了简单的代码来进行反转,但很难让它不改变原来的样子。初始代码如下:

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


char *reverse(char *inString){
    int j = 0;
    j = strlen(inString) -1;
    char temp;
    for(int i = 0 ; i<=j; i++,j--){
        temp = inString[i];
        inString[i] = inString[j];
        inString[j] = temp;
    }
    return inString;
}


int main(){
    char string[20]="hello world";
    printf("%s\n",string);
    char *outString = reverse(string);
    printf("%s\n",string);
    printf("%s\n",outString);
}

输出:

hello world
dlrow olleh
dlrow olleh

最佳答案

我的建议:

  1. 为新字符串分配内存。
  2. 填写包含输入字符串反转的新字符串。
  3. 返回新字符串。
  4. 确保在调用函数中释放新字符串的内存。

类似于:

char *reverse(char *inString)
{
   int len = strlen(inString);
   char* retString = malloc(len+1);
   if ( retString != NULL )
   {
      for(int i = 0 ; i < len; ++i)
      {
         retString[len-1-i] = inString[i];
      }
      retString[len] = '\0';
   }
   return retString;
}

关于c - 字符串反转而不改变原始字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29265506/

相关文章:

java - 为什么在 java 中不允许使用 int a[10]?

string - 宏中可怕的复合引用

java.io.PrintStream显示

Java - 将转义字符串转换为字符

c - 将所有文件包含在一个 .h 文件中并在 AVR 的任何位置都包含该文件是否是一种好习惯?

c - 在c中存储unsigned char数组的数组

c - __attribute(对齐)测试。它有什么作用?

c - 使用 realloc 连接字符串

c++ - 将字符串转换为数字类型的通用方法?

R:如何显示一串单词的前n个字符