这个删除串S中所有与串T相同的子串的程序中,小弟我调试到SubString中的str1[i] = str2[j];时,就有错了。
这个删除串S中所有与串T相同的子串的程序中,我调试到SubString中的str1[i] = str2[j];时,就有错了。。
程序直接停止工作了,不知道问题在哪里?
#include <stdio.h>
#include <string.h>
int StrCompare (char * str1, char * str2) //比较str1和str2的大小
{
while (* str1 && * str2)
{
if (* str1 != * str2) return *str1 - *str2;
str1++; str2++;
}
if (* str1) return 1;
return 0;
}
void StrDelete (char * S, int pos, int len) //删除pos个字符起长度为len的子串
{
int i, j;
for (i = pos, j = pos + len; j < strlen (S); i++, j++)
S[i] = S[j];
S[i] = '\0';
}
int SubString (char * str1, char * str2, int pos, int len) //用str1返回str2中的第pos个字符起长度为len的子串
{
int i, j;
if (pos < 0 || pos > strlen (str2) - 1 || len < 0 || len > strlen (str2) - pos)
return 0;
for (i = 0, j = pos; i < len; i++, j++)
str1[i] = str2[j]; //这个地方报错
str1[i] = '\0';
return 1;
}
void DeleteSame (char *S, char * T) //删除串S中所有与串T相同的子串
{
int i, m ,n;
char * Sub = NULL;
m = strlen (S);
n = strlen (T);
for (i = 0; i < m; )
{
SubString (Sub, S, i, n);
if (StrCompare (Sub, T) != 0) i++;
else {
StrDelete (S, i, n);
i += n;
}
}
}
int main(void)
{
char str1[] = "abcdefabc";
char str2[] = "cd";
DeleteSame (str1, str2);
puts (str1);
return 0;
}
------解决方案--------------------
str1未分配内存
------解决方案--------------------
char * Sub = NULL; 没空间啊
把sub申明成一个足够长的数组吧,
没仔细看,根据需要,最好初始化成全'\0'
------解决方案--------------------
单步调试和设断点调试是程序员必须掌握的技能之一。
程序直接停止工作了,不知道问题在哪里?
#include <stdio.h>
#include <string.h>
int StrCompare (char * str1, char * str2) //比较str1和str2的大小
{
while (* str1 && * str2)
{
if (* str1 != * str2) return *str1 - *str2;
str1++; str2++;
}
if (* str1) return 1;
return 0;
}
void StrDelete (char * S, int pos, int len) //删除pos个字符起长度为len的子串
{
int i, j;
for (i = pos, j = pos + len; j < strlen (S); i++, j++)
S[i] = S[j];
S[i] = '\0';
}
int SubString (char * str1, char * str2, int pos, int len) //用str1返回str2中的第pos个字符起长度为len的子串
{
int i, j;
if (pos < 0 || pos > strlen (str2) - 1 || len < 0 || len > strlen (str2) - pos)
return 0;
for (i = 0, j = pos; i < len; i++, j++)
str1[i] = str2[j]; //这个地方报错
str1[i] = '\0';
return 1;
}
void DeleteSame (char *S, char * T) //删除串S中所有与串T相同的子串
{
int i, m ,n;
char * Sub = NULL;
m = strlen (S);
n = strlen (T);
for (i = 0; i < m; )
{
SubString (Sub, S, i, n);
if (StrCompare (Sub, T) != 0) i++;
else {
StrDelete (S, i, n);
i += n;
}
}
}
int main(void)
{
char str1[] = "abcdefabc";
char str2[] = "cd";
DeleteSame (str1, str2);
puts (str1);
return 0;
}
------解决方案--------------------
str1未分配内存
------解决方案--------------------
char * Sub = NULL; 没空间啊
把sub申明成一个足够长的数组吧,
没仔细看,根据需要,最好初始化成全'\0'
------解决方案--------------------
单步调试和设断点调试是程序员必须掌握的技能之一。