大家来帮小弟我挑一上这个程序的毛病
大家来帮我挑一下这个程序的毛病
自己动手写了个小程序,总觉得别扭,有的地方有问题,有的地方也可以优化,还请各位高手们帮帮忙。
#include "stdafx.h"
#include "string.h"
#include <iostream>
#define MAX 100
#define ASCIIMIN 97
#define ASCIIMAX 122
using namespace std;
void strcopy(char str1[], char str2[])
{
int i = 0;
int j = 0;
for(i=0; i<strlen(str2); i++)
{
if(str2[i]>='a' && str2[i]<='z')
{
str1[j] = str2[i];
j++;
}
}
str1[j] = '\0';
}
int main(int argc, char* argv[])
{
printf("Please input one string():\n");
int n_num[MAX]={0};
int i;
int j;
char c_char[MAX];
char c_ch[MAX];
char temp;
gets(c_char);
strcopy(c_ch, c_char);
for(i=0; c_char[i]!='\0'; i++)
{
for(j=i+1; j<strlen(c_ch); j++)
{
if(c_ch[i] > c_ch[j])
{
temp = c_ch[i];
c_ch[i] = c_ch[j];
c_ch[j] = temp;
}
}
if(c_char[i]>=ASCIIMIN && c_char[i]<=ASCIIMAX)
{
n_num[c_char[i] - ASCIIMIN]++; /*取得每个小写字母出现的个数*/
}
}
printf("过滤后的小写字母为:%s\n", c_ch);
for(j=0; j<MAX; j++)
{
if(n_num[j] != 0)
{
printf("%c,%d\n", ASCIIMIN + j, n_num[j]);
}
}
system("pause");
return 0;
}
------解决思路----------------------
在strcopy函数中未检测str1和str2的有效性,如果这两个参数都是空的,你就没有处理,最好加上assert(str1 != NULL && str2 != NULL);
------解决思路----------------------
如果str2的长度大于str1你的那个复制函数还能正确运行吗
自己动手写了个小程序,总觉得别扭,有的地方有问题,有的地方也可以优化,还请各位高手们帮帮忙。
#include "stdafx.h"
#include "string.h"
#include <iostream>
#define MAX 100
#define ASCIIMIN 97
#define ASCIIMAX 122
using namespace std;
void strcopy(char str1[], char str2[])
{
int i = 0;
int j = 0;
for(i=0; i<strlen(str2); i++)
{
if(str2[i]>='a' && str2[i]<='z')
{
str1[j] = str2[i];
j++;
}
}
str1[j] = '\0';
}
int main(int argc, char* argv[])
{
printf("Please input one string():\n");
int n_num[MAX]={0};
int i;
int j;
char c_char[MAX];
char c_ch[MAX];
char temp;
gets(c_char);
strcopy(c_ch, c_char);
for(i=0; c_char[i]!='\0'; i++)
{
for(j=i+1; j<strlen(c_ch); j++)
{
if(c_ch[i] > c_ch[j])
{
temp = c_ch[i];
c_ch[i] = c_ch[j];
c_ch[j] = temp;
}
}
if(c_char[i]>=ASCIIMIN && c_char[i]<=ASCIIMAX)
{
n_num[c_char[i] - ASCIIMIN]++; /*取得每个小写字母出现的个数*/
}
}
printf("过滤后的小写字母为:%s\n", c_ch);
for(j=0; j<MAX; j++)
{
if(n_num[j] != 0)
{
printf("%c,%d\n", ASCIIMIN + j, n_num[j]);
}
}
system("pause");
return 0;
}
------解决思路----------------------
在strcopy函数中未检测str1和str2的有效性,如果这两个参数都是空的,你就没有处理,最好加上assert(str1 != NULL && str2 != NULL);
------解决思路----------------------
如果str2的长度大于str1你的那个复制函数还能正确运行吗