1.
void input(char * p, int n)
{
int i;
for(i = 0; i < n; i++)
*(p + i) = getchar() ;
*(p + i) = '\0';
}
2.
void input(char * p, int n)
{
int i;
for(i = 0; i < n; i++)
*(p + i) = getchar() ;
if(isspace(*(p + i)))
break;
*(p + i) = '\0';
}
3.
void word(char * p)
{
int begin, end;
for(begin = 0; isspace(*(p + begin)); begin++)
continue;
for(end = begin; !isspace(*(p + end)); end++)
continue;
*(p + end) = '\0';
for(;*(p + begin) != '\0'; p++)
*p = *(p + begin);
*p = '\0';
}
4.
char *mystrchr(char *p, char ch)
{
char *p_save = p;
if(*p == '\0')
return NULL;
while(1)
{
if(*p == ch)
{
return p_save;
}
else
{
if(*++p == '\0')
return NULL;
p_save = p;
}
}
}
5.
int is_within(char *p, char ch)
{
while(*p != '\0')
{
if(*p == ch)
return 1;
p++;
}
return 0;
}
6.
char *strncpy(char *p1, char *p2, n)
{
char *p = p1;
while(n--)
*p1++ = *p2++;
return p;
}
7.
char *string_in(char *p1, char *p2)
{
char *p1_save = p1, *p2_save = p2;
if(*p1 == '\0' || *p2 == '\0') return NULL;
while(1)
{
if(*p1 == *p2)
{
if(*++p2 == '\0') return p1_save;
if(*++p1 == '\0') return NULL;
}
else
{
if(*++p1 == '\0') return NULL;
p1_save = p1;
p2 = p2_save;
}
}
}
8.
void reverse(char *p)
{
int i, n;
char temp;
for(n = 0; *(p + n) != '\0'; n++)
continue;
n--;
for(i = 0; i < n - i; i++)
{
temp = p[i];
p[i] = p[n -i];
p[n - i] = temp;
}
}
9.
void delspace(char *p1)
{
char *p2;
while(*p1 != '\0')
{
if(*p1 = ' ')
{
p2 = p1;
while(*p2 != '\0')
{
*p2 = *(p2 +1);
p2++;
}
p1--;
}
p1++;
}
}
10.
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void origin_put(char **p, int n);
void ascii_put(char **p, int n);
void length_put(char **p, int n);
int first_word_length(char *p);
void word_put(char **p, int n);
int main(void)
{
char str[10][81];
char *p[10];
char command[10];
int n;
while(1)
{
n = 0;
puts("input no more than 10 strings finished by EOF(^Z):");
do
{
if(gets(str[n]) == NULL)
break;
p[n] = str[n];
n++;
}
while(n < 10);
puts("select:");
puts("a. put originally");
puts("b. put in order of ascii");
puts("c. put in order of string's length");
puts("d. put in order of first word's length");
puts("e. input strings again");
puts("q. quit");
do
{
gets(command);
switch(command[0])
{
case 'a': puts("put originally:");
origin_put(p,n);
break;
case 'b': puts("put in order of ascii:");
ascii_put(p, n);
break;
case 'c': puts("put in order of string's length:");
length_put(p, n);
break;
case 'd': puts("put in order of first word's length:");
word_put(p, n);
break;
case 'e': break;
default: puts("Quit.");
return 0;
}
}
while(command[0] != 'e');
}
}
void origin_put(char **p, int n)
{
int i;
for(i = 0; i < n; i++)
puts(p[i]);
}
void ascii_put(char **p, int n)
{
int i, j;
char *temp;
for(i = 0; i < n; i++)
for(j = 0; j < n- i- 1; j++)
if(strcmp(p[j], p[j+1]) > 0)
{
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
origin_put(p,n);
}
void length_put(char **p, int n)
{
int i,j;
char *temp;
for(i = 0; i<n; i++)
for(j = 0; j<n-i-1;j++)
if(strlen(p[j]) > strlen(p[j+1]))
{
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
origin_put(p, n);
}
int first_word_length(char *p)
{
int i = 0;
for(;!isalpha(*p);p++)
if(*p == '\0')
return 0;
for(i = 1; isalpha(p[i]);i++)
continue;
return 1;
}
void word_put(char **p, int n)
{
int i, j;
char *temp;
for(i = 0; i<n; i++)
for(j = 0; j<n-i-1; j++)
if(first_word_length(p[j]) > first_word_length(p[j+1]))
{
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
origin_put(p, n);
}
11.
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int word = 0, upper = 0, lower = 0, punct = 0, digit = 0, begin =0;
char ch;
while((ch = getchar()) != EOF )
{
if(isalpha(ch))
{
if(begin = 0)
{
word++;
begin =1;
}
}
else(begin =0);
if(isupper(ch))
upper++;
if(islower(ch))
lower++;
if(ispunct(ch))
punct++;
if(isdigit(ch))
digit++;
}
printf("word:%d\nupper:%d\nlower:%d\npunct:%d\ndigit:%d\n", word, upper, lower, punct, digit);
return 0;
}
12.