这是我的代码。我似乎无法弄明白。有时我没有输出,有时我只得到3个随机字符,无论输入的字符串有多长。
typedef
我真的很害怕在这里提出这些问题,但我似乎无法解决这个问题...... 任何帮助表示赞赏
答案 0 :(得分:1)
从概念上讲,您需要交换两端,直到留下长度为0或1的字符串。但是,每次迭代后都不需要测试字符串剩余部分的长度,因为它可以显示1}}需要完全length/2
掉期。
void swap_char (char *a, char *b)
{
char tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void reverse (char *s)
{
size_t length = strlen (s);
for (size_t i = 0; i < length / 2; i++) {
swap_char (&s[i], &s[length - i - 1]);
}
}
答案 1 :(得分:0)
没有必要让这样的事情复杂化,试试这个:
#include <stdio.h>
int main(void){
char *src = "Michi";
char dest[256];
int i=-1,j=0;
while(src[++i]!='\0');
while(i>=0){
dest[j++] = src[--i];
}
dest[j]='\0';
printf("Your new string is: %s",dest);
return 0;
}
输出:
Your new string is: ihciM
这可能就是你所需要的:
#include<stdio.h>
#include<string.h>
void reverse(char *ptr);
int main(void) {
char src[256] = "Michi";
reverse(src);
printf("Your new string is: %s",src);
return (0);
}
void reverse(char *src){
char dest;
size_t i, j = 0;
i = 0;
j = strlen(src) - 1;
while (i < j) {
dest = src[i];
src[i] = src[j];
src[j] = dest;
i++;
j--;
}
}
答案 2 :(得分:0)
不要使用gets()
,请使用fgets()
。要反转字符串,您不需要传递字符数,因为C中的字符串是空终止的。检查这个非常简单的函数:
#include <stdio.h>
void reverse(char *_Str);
int main(void)
{
char str[] = "Hello Buddy";
reverse(str);
printf("%s\n",str);
return 0;
}
void reverse(char *_Str)
{
char tmp,*_b,*_e;
_b = _e = _Str;
while(*_e) _e++;
_e--;
while(_b < _e)
{
tmp = *_b;
*_b++ = *_e;
*_e-- = tmp;
}
}
答案 3 :(得分:0)
你错过的非常重要的一行是分配空字符。并且不要将字符串的长度作为用户的输入。使用函数some_integer=strlen(stringname);
这将返回stringname
的长度并将其分配给some_integer
。你的反转字符串的功能应该是
void reverse(char *userarray) // no need of a second argument. Do not trust your users.
{
char temp;
int fromEnd,fromStart = 0; /
fromEnd = strlen(userarray)-1; // here the length of your string is assigned to fromEnd.
while (fromStart < fromEnd)
{
temp = userArray[fromStart];
userArray[fromStart] = userArray[fromEnd];
userArray[fromEnd] = temp;
fromStart++;
fromEnd--;
}
userarray[strlen(userarray)-1]='\0'; //You missed this line (very important)
}
谢谢你的printf
陈述。
应该是
printf("Your reversed string is %s \n",string);
不
printf("Your reversed string is %s \n"),string;
我相信这会奏效。检查一下,让我知道它是否适合您。
答案 4 :(得分:0)
代码不正确。 printf()
所需的字符串不在函数中。 @M Oehm
/// printf("Reversed string is: %s\n"), string;
printf("Reversed string is: %s\n", string);
原始代码也可以轻松消除终止空字符'\0'
的字符串。最好使用strlen(string)
而不是询问用户的长度。
可能会使用- 1
评论@WalterM。目前还不清楚OP正在使用什么价值。
// fromEnd = numberOfChars;
if (numberOfChars <= 0) return;
fromEnd = numberOfChars - 1;
我到目前为止看到的答案依赖于int
很好地解决字符串的所有元素。 size_t
是正确的方法,因为int
可能太小。
许多答案都会在""
等字符串上失败。
所以这是没有这些限制的另一个贡献。
#include <string.h>
#include <stdio.h>
char *str_revese_inplace(char *s) {
char *left = s;
char *right = s + strlen(s);
while (right > left) {
right--;
char t = *right;
*right = *left;
*left = t;
left++;
}
return s;
}
void stest(const char *s) {
char t[strlen(s) + 1];
// or char t[100];
strcpy(t, s);
printf("'%s' --> '%s'\n", s, str_revese_inplace(t));
}
int main(void) {
stest("123");
stest("12");
stest("1");
stest("");
return 0;
}
输出
'123' --> '321'
'12' --> '21'
'1' --> '1'
'' --> ''