取字符串
用户输入一个字符串,然后输入起始位置k和长度l
显示从第k个字符开始,长度为l的子字符串。
要求字符串输入一次,子串操作可以多次,输入位置和长度均
为0时停止。
运行结果
◦ 请输入字符串(可以有空格格)
◦ the c++ programming
◦ 请输入子串起始位置和长度
◦ 1 5
◦ the c
问题分析
取字符就是从一个字符串中取出连续的部分字符串。
若字符串用字符数组表示
可以将从k到k+l-1的字符逐个复制到令一个字符数组中
形成一个新的字符串
特别注意在末尾加'\0'
算法描述
①设源字符串用str[101]表示(100为最大长度);
②输入起始位置k(从1开始),l(字符串长度);
③求源字符串的长度len;
④j=0;
⑤对i=k-1,…,k+l-2且i<len
sub[j]=str[i]
j=j+1;
⑥sub[j]= ‘\0’;
⑦输出sub,结束
代码实现
#include <iostream>
using namespace std;
int main(){
char str[101]; //源字符串
char sub[101]; //子字符串
int len;
int k,l; //子字符串起始位置,子字符串长度
int i,j=0; //循环变量
//输入源字符串
cout<<"请输入字符串(可以有空格格)"<<endl;
cin.getline (str,100);
len = 0;
while(str[len]!='\0')
{
len++;
}
cout<<"请输入子串起始位置和长度"<<endl;
cin>>k>>l;
while(k!=0 && l!=0)
{
j = 0;
for(i=k-1; i=k+l-1 && i<len; ++i)
{
sub[j] = str[i];
j++;
}
sub[j] = '\0';
cout<<sub<<endl; //输出子串
cout<<"请输入子串起始位置和长度"<<endl;
cin>>k>>l; //再次输入子字符串起始位置,子字符串长度
}
return 0;
}
注意
①本例包含求字符串的长度的操作,能否利用系统函数?
②取子串的for循环结束时,子串字符确实已经放在sub中,但这时只能叫字符数组,还不能叫字符串。因为字符串是以’\0’为结束标志的,sub[j]=’\0’;就是在末尾放置结束标志,才成为字符串,才可以整体输出。