📜  在不使用任何字符串函数的情况下打印给定字符串的子字符串,并在C中循环

📅  最后修改于: 2021-05-25 18:38:58             🧑  作者: Mango

用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基础课程》。