首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

相关字符串

2013-01-21 
有关字符串#includestdio.h#includestdlib.h#includestring.h//求字符串中不同字符出现的次数;;;看

有关字符串
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//求字符串中不同字符出现的次数;;;看看哪里出问题了
int main()
{


 int a[40]={0},sum,i,j,k=0;
char str[100],b[40];


scanf("%s",str);


for(i=0;i<sum;i++)
{
 if(str[i]=='\0')continue;
    for(j=i;j<sum;j++)
 {
 if(str[i]==str[j])
 {
 a[k]++;
 b[k]=str[i];
 str[j]='\0';
 
 }
 k++;
 }
}


for(i=0;i<k;i++)
printf("%c%d\n",b[i],a[i]);
 
return 0;
}
c
[解决办法]
sum没有初始化,你是要在for循环里遍历字符数组,sum应该等于字符的长度,可以用
sum = strlen(str)
[解决办法]
1.sum没有赋值
2.k++应该放在内循环的外面。好好想想
3.

if(str[i]==str[j])
{
a[k]++;
b[k]=str[i];
str[j]='\0';//j=i的时候,你把str[j]变成'\0',导致下一个对比元素始终与前面不相等
}

改了一下:
int main()
{
int a[40]={0},sum,i,j,k=0;
char str[100],b[40];

scanf("%s",str);
sum=strlen(str);
for(i=0;i<sum;i++)
{
if(str[i]=='\0')continue;
a[k]++;//表示str[i]
b[k]=str[i];//str[i]已经找到了,b[k]放在这里就好了
for(j=i+1;j<sum;j++)//上面已经算过str[i],这里从i+1开始
{
if(str[i]==str[j])
{
a[k]++;
str[j]='\0';
}
}
k++;
}


for(i=0;i<k;i++)
printf("%c%d\n",b[i],a[i]);
 
return 0;
}

[解决办法]
提供一个不改变原字符串内容的:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_NUM 40

/* 
 * 从输入的字符数组中统计每个字符出现的个数
 * str 输入字符数组
 * s_num 统计每个字符的出现情况
 */
int f(char* str, int s_num[2][MAX_NUM])
{
int i = 0;
int j = -1;
while(1)
{
/* 退出条件 */
if (str[i] == '\0')
break;

/* 查看统计结果中是否存在当前字符,如果存在则统计个数增1 */
bool bfind = false;
for (int k=0; k<=j; k++)
{
if (str[i] == s_num[0][k])
{
s_num[1][k]++;
bfind = true;
break;
}
}

/* 如果没有找到,则将该字符统计到结果中 */
if (!bfind)
{
s_num[0][k] = str[i];
s_num[1][k] = 1;
j++;
}

i++;
}
return j+1;
}

int main()
{
int s_num[2][MAX_NUM];
char str[100];
scanf("%s",str);
int num = f(str, s_num);

for (int i=0; i<num; i++)
printf("%c %d\n", s_num[0][i], s_num[1][i]);

return 0;
}

热点排行