4.1 习题
<code>
#include "stdafx.h"
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
//返回字符串t在s中最右边出现的位置
int strindex(char s[] , char t[]);
int _tmain(int argc, _TCHAR* argv[])
{
char s[] = "would you like it?";
char t[] = "you";
int index ;
index = strindex(s,t);
cout<<index<<endl;
getchar();
getchar();
return 0;
}
int strindex(char s[] , char t[])
{
int i , j , k , pos ;
//用来控制源字符串
for(i = 0 ; i < strlen(s) ; i++)
{
//匹配查找串与源字符串,只有判断条件成立的时候才进入循环体中,循环体并不做任何操作,只是用来控制循环
for(j = i, k = 0 ; t[k]!='\0' && s[j] == t[k] ; j++, k++ )
;
if(k > 0 && t[k] == '\0')
{
//i的坐标是查找串的起始位置
pos = i ;
return pos+strlen(t)-1;
}
}
return -1 ;
}
</code>
4.2 习题
<code>
#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
#include<ctype.h>
using namespace std;
//将字符串转化成数字
double atof(char s[]);
int _tmain(int argc, _TCHAR* argv[])
{
//定义固定的数字字符串
char str[]="123.45e2";
double str_dou ;
str_dou = atof(str);
cout<<str_dou<<endl;
getchar();
getchar();
return 0;
}
double atof(char s[])
{
//需要判断一些非法字符
//分别计算整数与小数分值
double val , power ;
int val_e;
int i ,sign ,sign_e;
//字符前面去掉空格
for(i = 0 ; isspace(s[i]) ; i++)
;
//记录符号
sign = (s[i] == '-') ? -1 : 1 ;
if(s[i] == '+' || s[i]=='-')
i++ ;
for(val = 0.0 ; isdigit(s[i]) ; i++)
val = 10.0 * val + (s[i] - '0');
if(s[i] == '.')
i++ ;
for(power = 1.0 ; isdigit(s[i]) ; i++)
{
//控制小数点后面的位数
val = 10.0 * val + (s[i] - '0');
power *= 10 ;
}
//遇到‘e’或‘E’的情况
if(s[i] == 'e' || s[i] == 'E')
i++ ;
sign_e = (s[i] == '-') ? -1 : 1 ;
if(s[i] == '+' || s[i] == '-')
i++;
for(val_e = 0 ; isdigit(s[i]) ; i++)
val_e = 10 * val_e + (s[i] - '0') ;
val_e *= sign_e ;
//e后面的数为正数时,小数点向右移动;为负数时,小数点向左移动
if(val_e > 0 )
return sign*val/power*pow(10,val_e);
else
return sign*val/power*(pow(10,val_e));
}
</code>