将字符指针作为函数的参数编写一函数 void InvStr(char *s, int n),将字符串s中的前n个字符倒序排列

在主函数main中编写程序调用InvStr,对其功能进行测试。

第1个回答  2012-06-14
#include <stdio.h>

#define INIT_SIZE 20
#define INCR_SIZE 10

unsigned int StrLen(char *str) /// 求出字符串中含有的字符个数,不包括结束标志
{ /// * 这里我没有用库函数求长度,我不知道怎么用
unsigned int i;
for (i=0; str[i++]!='\0';);
return (i - 1);
}
void InvStr(char *s, int n) //逆置字符串s的前n个字符
{
int i; //索引变量
char ch; //中间变量

if ((int)StrLen(s) < n || n < 0) n = StrLen(s); //如果n不合适,则直接对整个字符串进行逆置

for(i = 0; i < n/2; i++){
ch = s[i];
s[i] = s[n-1-i];
s[n-1-i] = ch;
}
}
void main()
{
char * str = (char *) malloc (INIT_SIZE * sizeof(char));
char ch;
int i = 0; //字符串当前字符数
int len = INIT_SIZE; //字符串空间大小
while (ch = getchar()) { // 循环录入字符串
if (ch == '@') { ///如果按回车键,则结束
str[i] = '\0'; ///字符串结束标志
break;
}
if (i < len-1) {
str[i] = ch;
} else {
str = (char *) realloc (str, (len + INCR_SIZE) * sizeof(char)); //增加存储空间
str[i] = ch;
len += INCR_SIZE; //重新记录字符串空间
}
i++;
}
scanf("%d",&i);
InvStr(str,i);
printf("%s\n",str);
}
第2个回答  2012-06-12
char*作为常量,不能修该值,建议使用字符数组
第3个回答  2012-06-13
void InvStr(char *s, int n)
{
int i;
char c;
for(i=0;i<n/2;i++)
c=s[i],s[i]=s[n-1-i],s[n-1-i]=c;
}本回答被网友采纳