刚刚学习指针,忙活了一个下午,终于把这道题给写出来了
编写四个函数:strlen strtrim strltrim strrtrim。分别用于求出给定字符串长度(不包括末端字符),去除给定字符串两边的空格(中间不去除),去掉左边的空格和去掉右边的空格。代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Strlen(char *p);
void Strtrim(char *p, char *p2, char *p4);
void Strltrim(char *p, char *p1);
void Strrtrim(char *p, char *p2);
int main(int argc, const char * argv[]) {
char array[] = " H e l l o W o r l d ! ";
char *array2 = (char *) malloc(sizeof(char) * 50);
char *array3 = (char *) malloc(sizeof(char) * 50);
char *array4 = (char *) malloc(sizeof(char) * 50);
int len = Strlen(array);
printf("给定字符串长度是%d\n",len);
Strtrim(array, array3, array4);
Strltrim(array, array2);
Strrtrim(array,array3);
free(array2);
free(array3);
free(array4);
return 0;
}
int Strlen(char *p)
{
int len = 0;
int i = 0;
if (*(p+i) != '\0') {
while (*(p+i) != '\0') {
len++;
i++;
}
}
return len;
}
void Strtrim(char *p, char *p2, char *p4)
{
int len = Strlen(p);
int i = len-1;
while ((*(p+i)) == ' ') {
i--;
if ((*(p+i)) != ' ') {
for (int j = 0; j < len; j++) {
(*(p2+j)) = (*(p+i));
i--;
}
}
}
int count = Strlen(p2);
for (int i = 0; i < count / 2; i++) {
int tmp = p2[i];
p2[i] = p2[count-i-1];
p2[count-i-1] = tmp;
}
i = 0;
len = Strlen(p2);
while ((*(p2+i)) == ' ') {
i++;
if ((*(p2+i)) != ' ') {
for (int j = 0; j < len ; j++) {
(*(p4+j)) = (*(p2+i));
i++;
}
printf("去掉左右两边的空格后->%s<-\n",p4);
}
}
}
void Strltrim(char *p, char *p1)
{
int i = 0;
int len = Strlen(p);
while ((*(p+i)) == ' ') {
i++;
if ((*(p+i)) != ' ') {
for (int j = 0; j < len ; j++) {
(*(p1+j)) = (*(p+i));
i++;
}
printf("去掉左边的空格后->%s\n",p1);
}
}
}
void Strrtrim(char *p, char *p2)
{
int len = Strlen(p);
int i = len-1;
while ((*(p+i)) == ' ') {
i--;
if ((*(p+i)) != ' ') {
for (int j = 0; j < len; j++) {
(*(p2+j)) = (*(p+i));
i--;
}
//printf("去掉右边的空格后%s\n",p2);
}
}
int count = Strlen(p2);
for (int i = 0; i < count / 2; i++) {
int tmp = p2[i];
p2[i] = p2[count-i-1];
p2[count-i-1] = tmp;
}
printf("去掉右边的空格后%s<-\n",p2);
}