Training4:字符串训练
姓名:徐曹添 日期:2018.07.15
1.请编写一个C函数,该函数将一个字符串逆序 。
#include<stdio.h>
#include<string.h>
#define N 50
void strRev(char *s)
{
char temp;
char *end = s + strlen(s) - 1;
while (end > s)
{
temp = *s;
*s = *end;
*end = temp;
--end;
++s;
}
}
int main()
{
char s[N];
printf("Input string!\n");
fgets(s,N,stdin);
strRev(s);
printf("The strRcv string!");
puts(s);
While(1);
return 0;
}
2.请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出。
#include <stdio.h>
int fun2(int num);
int fun16(int num);
int fun8(int num);
int main()
{
int num,kind;
printf("Input the number : \n");
scanf("%d",&num);
printf("what kind of number do you want to change(2 or 16 or 8) :\n");
scanf("%d",&kind);
if(kind == 2)
{
fun2(num);
}
else if(kind == 16)
{
fun16(num);
}
else if(kind == 8)
{
fun8(num);
}
else
{
printf("error!\n");
}
return 0;
}
int fun2(int num)
{
int s[32] = {0};
int i,n = 0;
while(num != 0)
{
s[n++] = num % 2;
num = num / 2;
}
printf("二进制数为 :");
for(i = n - 1;i >= 0;i--)
{
printf("%d",s[i]);
}
printf("\n");
return 0;
}
int fun16(int num)
{
int s[32] = {0};
int i,n = 0;
while(num != 0)
{
s[n++] = num % 16;
num = num / 16;
}
printf("十六进制数为 :");
for(i = n - 1;i >= 0;i--)
{
printf("%d",s[i]);
}
printf("\n");
return 0;
}
int fun8(int num)
{
int s[32] = {0};
int i,n = 0;
while(num != 0)
{
s[n++] = num % 8;
num = num / 8;
}
printf("八进制数为 :");
for(i = n - 1;i >= 0;i--)
{
printf("%d",s[i]);
}
printf("\n");
while(1);
return 0;}
3. 输入一个字符串,计算字符串中子串出现的次字数。
#include <stdio.h>
#include <string.h>
void main()
{
char str1[20], str2[20], *p1, *p2;
int sum=0;
printf("Please input two strings\n");
scanf("%s%s", str1, str2);
p1=str1;
p2=str2;
while(*p1 != '\0')
{
if(*p1 == *p2)
{
while(*p1 == *p2 && *p2 != '\0')
{
p1++;
p2++;
}
}
else
p1++;
if(*p2 == '\0')
sum++;
p2=str2;
}
printf("%d", sum);
getchar();
}
4. 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,即将句子中的单词位置倒置,而不改变单词内部结构。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int i = 0;
int j = 0;
int len = 0;
char *temp;
char *str[] = { "I", "am","from","shanghai" ,NULL};
while (str[i] != NULL)
{
i++;
len++;
}
for(i = 0, j = len - 1; j > i; i++,j--)
{
temp =*(str+i);
*(str+i) = *(str+j);
*(str+j) = temp;
}
for(i = 0; i < len; i++)
{
printf("%s ", *(str+i));
}
printf("\n");
while(1);
return 0;
}
5. 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来。
提示:帧头和帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧
#include <stdio.h>
#include <string.h>
int main()
{
char s[100];
char str1[100];
char str2[100];
printf("Please enter your string:\n");
gets(s);
printf("Please enter the frame head:\n");
gets(str1);
printf("Please input pin the tail:\n");
gets(str2);
char *p = s;
char *p1 = str1;
char *p2 = str2;
char *p3 = NULL;
char *p4 = NULL;
printf("Legal frame in the string:\n");
while(*p)
{
if(strncmp(p,p1,strlen(str1))==0)
{
p3=p;
while(*p3)
{
if(strncmp(p3,p2,strlen(str2))==0)
{
int j=p3-p+strlen(str2),i;
p4 = p;
for(i=0;i<j;i++)
{
printf("%c",*p4++);
}
puts("\0");
}
*p3++;
}
}
*p++;
}
while(1);
return 0;
}