C 反向字符串函数工作不正常
这是我的密码。我只是想不通。有时我得不到输出,有时我只得到3个随机字符,不管输入的字符串有多长C 反向字符串函数工作不正常,c,string,reverse,C,String,Reverse,这是我的密码。我只是想不通。有时我得不到输出,有时我只得到3个随机字符,不管输入的字符串有多长 #include <stdio.h> #include <math.h> #include <string.h> void reverse(char* array, int numberOfChars); int main() { char string[250]; int length; printf("Enter a string:
#include <stdio.h>
#include <math.h>
#include <string.h>
void reverse(char* array, int numberOfChars);
int main()
{
char string[250];
int length;
printf("Enter a string: ");
gets(string);
printf("How long is the string:");
scanf("%d", &length);
reverse(string, length);
printf("Reversed string is: %s\n"), string;
return 0;
}
void reverse(char *userArray, int numberOfChars)
{
char temp;
int fromEnd = 0, fromStart = 0;
fromEnd = numberOfChars;
while (fromStart < fromEnd)
{
temp = userArray[fromStart];
userArray[fromStart] = userArray[fromEnd];
userArray[fromEnd] = temp;
fromStart++;
fromEnd--;
}
}
#包括
#包括
#包括
无效反转(字符*数组,int numberOfChars);
int main()
{
字符串[250];
整数长度;
printf(“输入字符串:”);
获取(字符串);
printf(“字符串有多长:”);
扫描频率(“%d”和长度);
反向(字符串、长度);
printf(“反向字符串为:%s\n”),字符串;
返回0;
}
无效反向(char*userArray,int numberOfChars)
{
焦炭温度;
int fromEnd=0,fromStart=0;
fromEnd=字符数;
while(fromStart
我真的很害怕在这里问这些问题,但我似乎无法解决它。。。
从概念上讲,您需要交换两端,直到剩下长度为0或1的字符串。但是,您不需要在每次迭代后测试字符串剩余部分的长度,因为可以显示需要精确的
length/2
交换
void reverse (char *s)
{
size_t length = strlen (s);
for (size_t i = 0; i < length / 2; i++) {
char tmp;
tmp = s[i];
s[i] = s[length - 1 - i];
s[length - 1 - i] = tmp;
}
}
void reverse(字符*s)
{
尺寸和长度=标准长度;
对于(大小i=0;i
没有必要让这样的事情复杂化,试试这个:
#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;
}
这可能是您需要的:
#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--;
}
}
#包括
#包括
无效反向(char*ptr);
内部主(空){
char src[256]=“Michi”;
反向(src);
printf(“您的新字符串是:%s”,src);
返回(0);
}
无效反向(字符*src){
char dest;
尺寸i,j=0;
i=0;
j=strlen(src)-1;
而(i
不要使用gets()
,使用fgets()
。要反转字符串,不需要传递字符数,因为C中的字符串以null结尾。请检查此非常简单的函数:
#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;
}
}
#包括
无效反向(字符*_Str);
内部主(空)
{
char str[]=“你好,伙计”;
反向(str);
printf(“%s\n”,str);
返回0;
}
无效反向(字符*_Str)
{
字符tmp、*_b、*_e;
_b=_e=_Str;
而(*_e)_e++;
_e--;
而
{
tmp=*_b;
*_b++=*\e;
*_e--=tmp;
}
}
您错过的非常重要的一行是分配空字符。并且不要将字符串的长度作为用户的输入。使用函数some_integer=strlen(stringname)
这将返回stringname
的长度,并将其分配给some\u 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)
}
void reverse(char*userarray)//不需要第二个参数。不要相信你的用户。
{
焦炭温度;
int fromEnd,fromStart=0/
fromEnd=strlen(userarray)-1;//这里字符串的长度被分配给fromEnd。
while(fromStart
并检查您的printf
语句
应该是
printf(“您的反向字符串是%s\n”,字符串)代码>
不是
printf(“您的反向字符串是%s\n”),字符串代码>
我相信这会奏效。请检查并告诉我它是否适合您。代码不正确。函数中没有printf()
所需的字符串
此外,原始代码还可以轻松清除以字符串结尾的空字符'\0'
。最好使用strlen(string)
而不是向用户询问长度
可能应使用的注释为-1
。目前尚不清楚OP使用的是什么值
// fromEnd = numberOfChars;
if (numberOfChars <= 0) return;
fromEnd = numberOfChars - 1;
输出
'123' --> '321'
'12' --> '21'
'1' --> '1'
'' --> ''
既然索引从0开始,是否应该fromEnd=numberOfChars-1
?您真的要问用户字符串有多长?计算机可以更可靠地做到这一点。与用户不同的是,计算机甚至可能在计算字符时很有趣。不要使用变量名(string),这是一个保留关键字。你能给我们一个输入字符串和长度示例吗?仔细看看你的printf
调用:string
必须在parantises中。我不确定你从同一点索引这两个字符串是什么意思。你似乎比我有更多的指针(?),但在我从end=numberOfChars改为fromEnd=numberOfChars-1后程序就可以运行了。这就是OP所问的,我应该给出一个完整的答案吗?OP现在知道他需要做什么了,这就是重点。
// fromEnd = numberOfChars;
if (numberOfChars <= 0) return;
fromEnd = numberOfChars - 1;
#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'
'' --> ''