因此在大学学习几年后,我试图通过简单的弦乐反转器来增强我的经验。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
*
*/
int main(int argc, char** argv) {
reverser();
return(0);
}
int reverser(){
printf("Please enter a String: ");
//return (0);
int len;
char input[10];
scanf("%s",&input);
int quit = strcmp(input,"quit");
if(quit == 0){
printf("%s\n","Program quitting");
return(0);
}
len = strlen(input);
printf("%i\n",len);
char reversed[len];
int count = 0;
while (count <= (len-1)){
//printf("%i\n",(len-count));
reversed[count] = input[(len-1)-count];
count++;
}
//printf("%s\n",input);
printf(reversed);
printf("\n");
reverser();
}
当我输入“你好”时,你会期望“olleh”作为回应,但我得到“olleh:$ a ca&amp; @”,
如何才能将字符串输入反转并返回?
Bombalur
答案 0 :(得分:3)
在数组末尾添加'\ 0'。 (例如,只复制字符,直到你达到'\ 0' - 这是数组[strlen(array)]的点,然后当你完成时,在下一个字符处添加'\ 0')
答案 1 :(得分:2)
字符串通常以零字节终止。所以它应该是
char reversed[len+1];
你应该清除最后一个字节
reversed[len] = (char)0;
答案 2 :(得分:1)
你忘记了字符串末尾的\0
答案 3 :(得分:0)
这是因为您正在创建一个大小为10的数组。当您将一些数据输入(使用scanf)并且数组未完全填满时,此数组中的printf将在内存中提供垃圾值。您应该通过检查\ n。
来迭代输入的长度答案 4 :(得分:0)
的字符串长度必须为+ 1,这样你就可以在字符串末尾有一个\ 0来解决你的问题
答案 5 :(得分:0)
以下是字符串反向程序的(简单和最小的实现)(显然,未考虑错误条件,极角情况,空格,更宽的字符集等)。
#include <stdio.h>
int strlen(char *s)
{
char *p = s;
while (*p)
p++;
return p - s;
}
char * strrev(char a[])
{
int i, j;
char temp;
for (i=0, j=strlen(a)-1 ; i<j ; i++, j--) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
return a;
}
int main()
{
char str[100];
printf("Enter string: ");
scanf("%s", str);
printf("The reverse is %s \n", strrev(str));
return 0;
}
希望这有帮助!