我正在编写一个程序,以检查给定的字符串是否是回文。我编写了一个函数来反转字符串,但是无法将反转的字符串存储在其他变量中。
#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 a
const char *`reversed += s[i];
不会s[i]
按您预期的那样追加printf("%s", stringPalindrome(s,i,n));
作为未定义的行为,因为stringPalindrome返回achar
而不是字符串函数stringPalindrome不能将反向字符串存储在作为字符数组的局部变量中,然后返回具有未定义行为的该数组。您可以让输入字符串保持不变:
在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] 删除。
我来说两句