Code Bye

菜鸟求助帖,寻大神解释程序运行的毛病

 

//对一个长度为n的字符串从其第k个字符起,删去m个字符,组成长度为n-m新字符串,并输出处理后的字符串。用自定义函数实现。
#include <stdio.h>
#include <stdlib.h>
char *fact(int n,int m,int k,char *str1,char *str2);
int main()
{
int n,m,k,i;
char *str1,*str2;
printf(“请输入长度n:\n”);
scanf(“%d”,&n);
str1=(char*)malloc(n*sizeof(char));
printf(“请输入删去字符的个数m:\n”);
scanf(“%d”,&m);
str2=(char*)malloc((n-m)*sizeof(char));
printf(“请输入开始删除的字符个数:\n”);
scanf(“%d”,&k);
printf(“请输入长度为%d的字符串:\n”,n);
for(i=0;i<n;i++)
{
scanf(“%c”,str1+i);
}
str2=fact(n,m,k,str1,str2);
printf(“处理后的字符串为:%s\n”,str2);
return 0;
}
char *fact(int n,int m,int k,char *str1,char *str2)
{
int i;
for(i=0;i<k;i++)
{
*(str2+i)=*(str1+i);
}
for(i=0;i<m;i++)
{
*(str2+k+i)=*(str1+k+m+i);
}
*(str2+k+i)=””\0″”;
return str2;
}
用VC6.0运行之后最后一位总带个?,可能存在的问题不止一处,望大神指点。

10分
/**************************************
 *FILE    :D:\c\main.c
 *PROJECT :NULL
 *AUTHOR  :707wk
 *CREATED :2015-5-14 下午 10:18:01
 *TEXT    :对一个长度为n的字符串从其第k个字符起,删去m个字符并输出
 *EMAIL   :gtsoft_wk@foxmail.com
 *CODE    :https://github.com/707wk
***************************************/

#include <stdio.h>

void strcatstr(char* str1,char *str2)
{
	while(*str1)str1++;
	while(*str1++=*str2++);
}

int main()
{
	int start;
	int end;
	char str[100];
	printf("请输入字符串:\n");
	scanf("%s",str);
    printf("请输入开始删除的字符位置:");
    scanf("%d",&start);
    printf("请输入删去字符的个数:");
    scanf("%d",&end);
    
    str[start-1]=""\0"";
	strcatstr(str,str+start+end-1);

    printf("处理后的字符串为:%s\n",str);
    return 0 ;
}
修改如下:
//对一个长度为n的字符串从其第k个字符起,删去m个字符,组成长度为n-m新字符串,并输出处理后的字符串。用自定义函数实现。
#include <stdio.h>
#include <stdlib.h>
char *fact(int n, int m, int k, char *str1, char *str2);
int main()
{
	int n, m, k, i;
	char *str1, *str2;
	printf("请输入长度n:\n");
	scanf("%d", &n);
	str1 = (char*)malloc(n*sizeof(char));
	printf("请输入删去字符的个数m:\n");
	scanf("%d", &m);
	str2 = (char*)malloc((n - m)*sizeof(char));
	printf("请输入开始删除的字符个数:\n");
	scanf("%d", &k);
	printf("请输入长度为%d的字符串:\n", n);
	getchar();    //读入回车
	for (i = 0; i<n; i++)
	{
		scanf("%c", str1 + i);
	}
	str1[i] = 0;    //加结束符
	str2 = fact(n, m, k, str1, str2);
	printf("处理后的字符串为:%s\n", str2);
	return 0;
}
char *fact(int n, int m, int k, char *str1, char *str2)
{
	int i;
	for (i = 0; i < k; i++)
	{
		*(str2 + i) = *(str1 + i);
	}
	for (i = 0; i < n - m; i++)  //n - m
	{
		*(str2 + k + i) = *(str1 + k + m + i);
	}
	*(str2 + k + i) = ""\0"";
	return str2;
}

30分
还得确保你的输入是合法的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明菜鸟求助帖,寻大神解释程序运行的毛病