我已经编写了一个程序来反转一个字符串..但它不起作用..它打印的是扫描的相同字符串..代码有什么问题?
#include <stdio.h>
#include <stdlib.h>
char *strrev(char *s)
{
char *temp = s;
char *result = s;
char t;
int l = 0, i;
while (*temp) {
l++;
temp++;
}
temp--;
for (i = 0; i < l; i++) {
t = *temp;
*temp = *s;
*s = t;
s++;
temp--;
}
return result;
}
int main()
{
char *str;
str = malloc(50);
printf("Enter a string: ");
scanf("%s", str);
printf("%s\n\n", strrev(str));
return 0;
}
答案 0 :(得分:15)
for (i = 0; i < l; i++)
你正在遍历整个字符串,所以你要将它反转两次 - 毕竟它不会被反转。只走一半:
for (i = 0; i < l / 2; i++)
另外,如果您被允许,请尝试使用int len = strlen()
而不是while-not-end-of-string循环。
答案 1 :(得分:4)
你交换了两次字符串的内容。
答案 2 :(得分:2)
使用以下代码..
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
char *strrev(char *s)
{
char *temp = s;
char *result = s;
char t;
while (*temp)
temp++;
while (--temp != s)
{
t = *temp;
*temp = *s;
*s++ = t;
}
return result;
}
int main()
{
char *str;
str = (char*)malloc(50);
printf("Enter a string: ");
scanf("%s", str);
printf("%s\n\n", strrev(str));
return 0;
}
答案 3 :(得分:1)
逻辑是将从开头到上半部分的字符与下半部分的最后一个字符交换,即高达len / 2。只需修改你的for循环,如下所示&amp;它会对你有用 for(i = 0; i&lt; l / 2; i ++){
答案 4 :(得分:1)
你可以使用这个简单的代码
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int str_len (char *str)
{
char *ptr = str;
while (*str)
str++;
return str - ptr;
}
int main ()
{
char *str;
int length;
str = (char*)malloc(50);
printf("Enter a string: ");
scanf("%s", str);
length = str_len(str) - 1;
for (int i = length ; i >= 0 ; i--)
printf ("%c", str[i]);
return 0;
}
答案 5 :(得分:0)
实际上你正在将字符串反转两次...所以在到达字符串的中间之后,你应该终止循环,你的循环应该运行一半的字符串长度是l / 2(在这种情况下) 。所以你的循环应该像
for(i = 0; i < i / 2; i++)
答案 6 :(得分:0)
交换字符串内容两次..
交换一次会有所帮助..
for (i = 0; i < l/2; i++)
答案 7 :(得分:0)
you can use this code to reverse the string
#include<stdio.h>
#include<string.h>
int main()
{
int n,i;
char str2[100],str1[100];
printf("enter teh string 1\n");
gets(str1);
n = strlen(str1);
for(i=0;i<n;i++)
{
str2[n-1-i]=str1[i];
}
printf("%s\n",str2);
}