用C编写的函数mysubstr()不使用任何字符串函数,不使用任何循环并打印字符串的。该函数不应修改字符串的内容,并且不应使用临时char数组或字符串 。
例如, mysubstr(“ geeksforgeeks”,1,3)应该显示“ eek ”,即索引1和3之间的子字符串。
一种解决方案是使用递归。感谢Gopi和oggy提出了此解决方案。
#include
// This function prints substring of str[] between low and
// high indexes (both inclusive).
void mysubstr(char str[], int low, int high)
{
if (low<=high)
{
printf("%c", str[low]);
mysubstr(str, low+1, high);
}
}
int main ()
{
char str[] = "geeksforgeeks";
mysubstr(str, 1, 3);
return 0;
}
输出:
eek
如果也不允许递归怎么办?
我们总是可以使用指针算法来更改开始部分。例如(str + i)给我们第i个字符的地址。为了限制结尾,我们可以在printf中使用宽度说明符,当在格式字符串使用*时,可以将宽度说明符作为参数传递。
#include
// This function prints substring of str[] between low and
// high indexes (both inclusive).
void mysubstr(char str[], int low, int high)
{
printf("%.*s", high-low+1, (str+low));
}
int main ()
{
char str[] = "geeksforgeeks";
mysubstr(str, 1, 3);
return 0;
}
输出:
eek
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。