#include  <stdio.h>
main()
{
char  str[256];

int j;
int  i,k,m;
printf("请输入字符串:");
gets(str);//自动就会有字符串结束符的
j=0;

  for(i=1;str[i-1]!='\0';i++)
  {
if(str[i]=='g'||str[i]=='\0')
{
   char  str1[256];
   for(k=j,m=0;k<i;k++,m++)
   {
str1[m]=str[k];

   }
str1[m+1]='\0';
printf("%s\n",str1);
j=i;
}
  }
  printf("%d",j);
}
                 在把字符串按g分割完后前两个字符串的后面总有乱码(具体点是个“?”),这是为什么啊?

解决方案 »

  1.   


    #include <stdio.h>
    main()
    {
    char str[256];
    int j;
    int i,k,m;
    printf("请输入字符串:");
    gets(str);//自动就会有字符串结束符的
    j=0;
    for(i=1;str[i-1]!='\0';i++)
    {
    if(str[i]=='g'||str[i]=='\0')
    {
    char str1[256];
    for(k=j,m=0;k<i;k++,m++)
    {
    str1[m]=str[k];
    }
    //退出循环的时候,m指的就是字符串的末尾了
    //你再加1不就多了一位吗
    str1[m]='\0';
    printf("%s\n",str1);
    //这里,你认为你的意思是g用来分隔,但是g不能
    //算在字符串中。那么就应该改成i+1
    //你原来的那样,分开的两个字符串,下串的首个字母是g
    j=i+1;
    }
    }
    printf("%d",j);
    }
      

  2.   

    主要就是第二个for退出时m已经指向字符串末尾了……