itgle.com

请编写一个函数char *fun(char *s,int n)。函数fun()的功能是将字符串s中的字符“循环左移”n位。例如,输入“ABCDE”,则循环左移2位应输出“CDEAB”,输入“1234567”,循环左移3位应输出“4567123”。注意:部分源程序已存在文件PROC13.cpp中。请勿修改主函数和其他函数中的任何内容,仅在函数fun()的花括号中填写若干语句。文件PROC13.cpp的内容如下://PROC13.cppinclude <iostream>include <string>usi

题目

请编写一个函数char *fun(char *s,int n)。函数fun()的功能是将字符串s中的字符“循环左移”n位。例如,输入“ABCDE”,则循环左移2位应输出“CDEAB”,输入“1234567”,循环左移3位应输出“4567123”。

注意:部分源程序已存在文件PROC13.cpp中。

请勿修改主函数和其他函数中的任何内容,仅在函数fun()的花括号中填写若干语句。

文件PROC13.cpp的内容如下:

//PROC13.cpp

include <iostream>

include <string>

using namespace std;

char *fun(char *s,int n);

int main()

{

char str[81];

int n;

cout<<"Enter a string(less than 80 char)\n”;

cin>>str;

cout<<"\n Enter n:";

cin>>n;

if(n>strlen(str))

{

cout<<"\n Data overflow";

return 0;

}

cout<<"The result is: "<<fun(str,n)<<end1;

return 0;

}

char *fun(char*s,int n)

{

//* * * * * *

}


相似考题
更多“请编写一个函数char *fun(char *s,int n)。函数fun()的功能是将字符串s中的字符“循环左移”n位。例 ”相关问题
  • 第1题:

    请编写函数fun(),该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。

    例如,若二维数组中的数据为:

    W WWW

    S S S S

    H H H H

    则字符串中的内容应是WSHWSHWSHWSH。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<stdio.h>

    define M 3

    define N 4

    void fun(char (*s)[N],char *b)

    {

    }

    main()

    {

    char a[100],w[M][N]={{ 'W', 'W', 'W', 'W'},

    {'S', 'S', 'S', 'S'},{'H', 'H', 'H', 'H'}};

    int i,j;

    printf("The matrix:\n");

    for(i=0;i<M;i++)

    { for(j=0;j<N;j++)

    printf("%3c",w[i][j]);

    printf("\n");

    }

    fun(w,a);

    printf("The A string:In");

    puts(a);

    printf("\n\n");

    }


    正确答案:void fun(char (*s) [N]char *b) { int i j k=0; for (i=0; iN; i++) /*按列的顺序依次放到一个字符串中*/ for (j=0; jM; j++) b [k++] =s [j] [i]; b[k]='\0'; }
    void fun(char (*s) [N],char *b) { int i, j, k=0; for (i=0; iN; i++) /*按列的顺序依次放到一个字符串中*/ for (j=0; jM; j++) b [k++] =s [j] [i]; b[k]='\0'; } 解析:看到程序后,我们很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个字符串中,所以列标变化慢,行标变化快。注意其中第1个循环条件为iN(即列),第2个循环的条件为JM(即行),这是因为在循环的嵌套中越在内层,循环变化就越快。另外,在编写程序中注意是s[j][i]而非s[i][j]。

  • 第2题:

    请编写一个函数char *fun(char *s),其中s代表一个字符串。函数fun()的功能是将字符串s的元素倒置。例如,输入为“teacher”,则应输出“rehcaet”。

    注意:部分源程序已存在文件PROC10.cpp中。

    请勿修改主函数和其他函数中的任何内容,仅在函数fun()的花括号中填写若干语句。

    文件PROC10.cpp的内容如下:

    //PROC10. cpp

    include <iostream>

    include <string>

    using namespace std;

    char *fun(char *s);

    int main ( )

    {

    char str[81];

    cout<<"Please enter a string:\n";

    cin>>str;

    cout<<"The result is:"<<fun(str));

    cout<<end1;

    return 0;

    }

    char*fun(char*s)

    {

    //* * * * * * * * *

    }


    正确答案:

  • 第3题:

    请补充函数fun(char *s),该函数的功能是把字符串中的内容逆置。

    例如:字符串中原有的字符串为abcde,则调用该函数后,串中的内容变为edcba。

    注意;部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    $include<string.h>

    include<conio.h>

    include<stdio.h>

    define N 81

    void fun(char*s)

    {

    int i=0,t,n=strlen(s);

    for(;【 】;i++)

    {

    t=*(s+i);

    【 】;

    【 】;

    }

    }

    main()

    {

    char a[N];

    clrscr();

    printf("Enter a string:");

    gets(a);

    printf("The original string is:");

    puts(a);

    fun(a);

    printf("\n");

    printf("The string after modified:");

    puts(a);

    }


    正确答案:in/2或s+is+n-1-i或in-1-I *(s+i)=*(s+n-1-i) *(s+n-1-i)=t
    in/2或s+is+n-1-i或in-1-I *(s+i)=*(s+n-1-i) *(s+n-1-i)=t 解析:第一空:将字符串的内容逆置,实际上就是将第一个字符和最后一个字符交换,再将第二个字符与倒数第二个字符交换,依此类推,直到中间的字符为止。所以,长度为n的字符串需要交换的次数为n/2。还可以这样理解,交换时始终保持顺数的字符在倒数的字符前面。第二空:顺数第i个字符为*(s+i),倒数第i个字符为*(s+n-1-i)。第三空:掌握利用第三个变量进行变量交换的方法。本题中,第三个变量为t。

  • 第4题:

    阅读下列程序说明和C代码,将应填入(n)处。

    请补充函数fun(),该函数的功能是:只保留字符串中的大写字母,删除其他字符,结果仍保存在原来的字符串中,由全局变量m对删除后字符串的长度进行保存。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include<stdio.h>

    include<conio.h>

    int m;

    void fun(char*s)

    {

    int i=0,j=0;

    char *p=s;

    while(*(p+i))

    {

    if(*(p+i)>='A'&&*(p+i)<='Z')

    {

    (1);

    }

    (2);

    }

    s[j]='\0';

    (3);

    }

    main()

    {

    char str[80];

    clrscr();

    printf("\nEnter a string:");

    gets(str);

    printf("\n\nThe string is:\%s\n",str);

    fun(str);

    printf("\n\nThe string of changing is: \%s\n",str);

    printf("\n\nThe length of changed strtng is:\%d\n",m);

    }


    正确答案:(1)s[j++]=*(p+i)(2)i++(3)m=j
    (1)s[j++]=*(p+i)(2)i++(3)m=j 解析:填空1:将大写字母存于原字符串中,数组下标j自加1,为下一次存放做准备。填空2:为了判断字符串中的下一个字符是否为大写字母,变量i自加1。填空3:最后将大写字母的个数,即删除后字符串的长度赋给全局变量m。

  • 第5题:

    请编写一个函数fun(),它的功能是将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转为整数的函数)。

    例如,若输入字符串“-1234”,则函数把它转换为整数值 -1234。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <stdio.h>

    include <string.h>

    long fun(char *p)

    {

    }

    main ( )

    {

    char s[6];

    long n;

    printf("Enter a string:\n");

    gets(s);

    n=fun(s);

    printf("%ld\n",n);

    }


    正确答案:long fun (char *p) { long n=0; int flag=1; if(*p=='-') /*负数时置flag为-1*/ {p++;flag=-1;} else if(*p=='+') /*正数时置flag为1*/ p++; while(*p!='\0') {n=n*10+*p-'0'; /*将字符串转成相应的整数*/ p++; } return n*flag; }
    long fun (char *p) { long n=0; int flag=1; if(*p=='-') /*负数时置flag为-1*/ {p++;flag=-1;} else if(*p=='+') /*正数时置flag为1*/ p++; while(*p!='\0') {n=n*10+*p-'0'; /*将字符串转成相应的整数*/ p++; } return n*flag; } 解析:if()的作用是判断它是正数还是负数。while()循环的作用是将字符串转成相应的整数。注意*p是一个字符如'9', '4',并不是一个数,要将其转成相应的数字必须令其减去'0'(不是'\0'),即*p-'0'就得到*p这个字符的相应数字。如'0'-'0'=0, '8'-'0'=8等。必须在程序的前面加#includestdlib.h>,函数atol()的作用是将字符串p转成长整型数,它是一个库函数。