将字符串存储在C中的另一个变量中

拉夫里·普拉内斯

我正在编写一个程序,以检查给定的字符串是否是回文。我编写了一个函数来反转字符串,但是无法将反转的字符串存储在其他变量中。

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

char stringPalindrome(char s[100], int i, int n){
    char reversed = "";

    for(i=n;i>=0;i--){
        reversed += s[i];
    }

    return reversed;
}

int main(){
    char s[100];
    int i,n;

    gets(s);

    n = strlen(s)-1;

    printf("%s", stringPalindrome(s,i,n));

    return 0;
}

有没有一种方法可以在不使用pointers或的情况下将字符串存储在另一个变量中malloc或者calloc因为我是这种语言的新手,所以我有很多东西要学习

布鲁诺

这里的目标不是检查字符串是否是回文,而是反转字符串。

您的代码中有几个问题

  • char reversed = "";是错误的,相反char , not a char * nor aconst char *`
  • reversed += s[i];不会s[i]按您预期的那样追加
  • 参数stringPalindrome已经没有任何意义,必须是一个局部变量,而不是一个参数
  • 从不使用gets,如果输入的长度大于接收数组的长度,则行为未定义
  • printf("%s", stringPalindrome(s,i,n));作为未定义的行为,因为stringPalindrome返回achar而不是字符串

函数stringPalindrome不能将反向字符串存储在作为字符数组的局部变量中,然后返回具有未定义行为的该数组。您可以让输入字符串保持不变:

  • stringPalindrome中使用静态局部变量,但是函数的每次调用都会修改前一次调用产生的字符串
  • 使用stringPalindrome中的malloc堆中动态分配反向字符串,在这种情况下,调用方有责任在停止使用数组时释放该数组
  • 还可以将存储在数组中的数组存储为反向参数in的参数,作为out参数,在这种情况下,调用者有责任给数组足够长的时间来存储结果

在C语言中,函数strcat允许连接字符串,但是在您的情况下,您想添加一个字符,因此直接分配该字符,而不是使用昂贵的对strcat的调用(还假定两个字符串都以null终止)


使用全局变量,该函数必须注意不要写出其静态数组:

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

char * stringPalindrome(const char * s, size_t n)
{
  static char reversed[100];
  size_t i;
  
  if (n > sizeof(reversed) - 1)
    n = sizeof(reversed) - 1;
  
  for (i = 0; i < n; ++i)
    reversed[i] = s[n - i - 1];
  reversed[i] = 0;
  
  return reversed;
}

int main()
{
  char s[100];
  
  if (fgets(s, sizeof(s), stdin) != NULL)
    puts(stringPalindrome(s, strlen(s) - 1));
  
  return 0;
}

编译与执行:

pi@raspberrypi:/tmp $ ./a.out
azer ty

yt reza
pi@raspberrypi:/tmp $ 

使用动态分配:

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

char * stringPalindrome(const char * s, size_t n)
{
  char * reversed = malloc(n + 1);
  size_t i;
  
  for (i = 0; i < n; ++i)
    reversed[i] = s[n - i - 1];
  reversed[i] = 0;
  
  return reversed;
}

int main()
{
  char s[100];
  
  if (fgets(s, sizeof(s), stdin) != NULL) {
    char * r = stringPalindrome(s, strlen(s) - 1);
                         
    puts(r);
    free(r);
  }
  
  return 0;
}

编译与执行:

pi@raspberrypi:/tmp $ ./a.out
azer ty

yt reza
pi@raspberrypi:/tmp $ 

在输出参数中管理结果:

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

char * stringPalindrome(const char * s, char * reversed, size_t n)
{
  size_t i;
  
  for (i = 0; i < n; ++i)
    reversed[i] = s[n - i - 1];
  reversed[i] = 0;
  
  return reversed;
}

int main()
{
  char s[100];
  char r[100];
  
  if (fgets(s, sizeof(s), stdin) != NULL) {
    puts(stringPalindrome(s, r, strlen(s) - 1));
    puts(r);
  }
  
  return 0;
}

编译与执行:

pi@raspberrypi:/tmp $ gcc -Wall s.c
pi@raspberrypi:/tmp $ ./a.out
azer ty
yt reza
yt reza
pi@raspberrypi:/tmp $

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将变量连接到Bash中另一个变量或字符串的末尾

来自分类Dev

获取存储在变量中的字符串的值,其名称作为字符串存储在另一个变量中

来自分类Dev

不能用存储在变量中的另一个字符串替换一个字符串

来自分类Dev

将字符串复制到另一个C中

来自分类Dev

将字符串变量中的给定字符替换为另一个等长字符串变量中的字符

来自分类Dev

将变量存储在另一个变量中

来自分类Dev

如何在另一个 Java 类中存储带有变量的字符串?

来自分类Dev

将字符串插入C中的另一个字符串

来自分类Dev

如何将一个字符串数组存储到另一个字符串数组中?

来自分类Dev

Ansible - 将字符串与现有变量组合以注册到另一个变量中

来自分类Dev

将存储在char数组中的字符串部分复制到另一个数组

来自分类Dev

Swift 3:无法将 Token 值存储在另一个字符串中

来自分类Dev

如何将函数返回的字符串与Javascript中的另一个String变量进行比较

来自分类Dev

另一个不可变的字符串变量中的单引号内的字符串变量-VBA

来自分类Dev

如何用另一个替换字符串中的字符?在C ++中

来自分类Dev

如何将字符串C中的每个特定字符替换为另一个?

来自分类Dev

检查文件中的字符串,提取变量并写入另一个文件

来自分类Dev

将字符串数组复制到C中的另一个数组中

来自分类Dev

将分隔字符串中的文本提取到另一个分隔字符串中 TSQL

来自分类Dev

在另一个字符串中查找自定义变量字符串

来自分类Dev

用C中的另一个单词更改字符串中的单词

来自分类Dev

将字符串与另一个包含变量的字符串连接

来自分类Dev

使用NSUserDefaults将字符串数组保存到另一个UITableView中

来自分类Dev

将活动中的字符串复制到另一个Android

来自分类Dev

将字符串追加到MySQL中的另一个表

来自分类Dev

将按钮标签传递给另一个活动中的字符串

来自分类Dev

将双数替换为字符串中的另一个

来自分类Dev

将数据从字符串数组转移到另一个活动中

来自分类Dev

将字符串中的值更新到另一个表

Related 相关文章

  1. 1

    将变量连接到Bash中另一个变量或字符串的末尾

  2. 2

    获取存储在变量中的字符串的值,其名称作为字符串存储在另一个变量中

  3. 3

    不能用存储在变量中的另一个字符串替换一个字符串

  4. 4

    将字符串复制到另一个C中

  5. 5

    将字符串变量中的给定字符替换为另一个等长字符串变量中的字符

  6. 6

    将变量存储在另一个变量中

  7. 7

    如何在另一个 Java 类中存储带有变量的字符串?

  8. 8

    将字符串插入C中的另一个字符串

  9. 9

    如何将一个字符串数组存储到另一个字符串数组中?

  10. 10

    Ansible - 将字符串与现有变量组合以注册到另一个变量中

  11. 11

    将存储在char数组中的字符串部分复制到另一个数组

  12. 12

    Swift 3:无法将 Token 值存储在另一个字符串中

  13. 13

    如何将函数返回的字符串与Javascript中的另一个String变量进行比较

  14. 14

    另一个不可变的字符串变量中的单引号内的字符串变量-VBA

  15. 15

    如何用另一个替换字符串中的字符?在C ++中

  16. 16

    如何将字符串C中的每个特定字符替换为另一个?

  17. 17

    检查文件中的字符串,提取变量并写入另一个文件

  18. 18

    将字符串数组复制到C中的另一个数组中

  19. 19

    将分隔字符串中的文本提取到另一个分隔字符串中 TSQL

  20. 20

    在另一个字符串中查找自定义变量字符串

  21. 21

    用C中的另一个单词更改字符串中的单词

  22. 22

    将字符串与另一个包含变量的字符串连接

  23. 23

    使用NSUserDefaults将字符串数组保存到另一个UITableView中

  24. 24

    将活动中的字符串复制到另一个Android

  25. 25

    将字符串追加到MySQL中的另一个表

  26. 26

    将按钮标签传递给另一个活动中的字符串

  27. 27

    将双数替换为字符串中的另一个

  28. 28

    将数据从字符串数组转移到另一个活动中

  29. 29

    将字符串中的值更新到另一个表

热门标签

归档