从1个单词制作2个单词(大写和小写)

时间:2016-03-16 13:18:29

标签: c string

我做了一个程序,其中包含“SHaddOW”这个单词,并将其分为2个单词:SHOWadd

这是大写字符的一个单词和小写字符的另一个单词。但是当我运行该程序时,我遇到了一些问题。

#include <stdlib.h>
#include <string.h>
#define SIZE 10

int main()
{
    int i = 0;
    int countbig = 0 , countsmall = 0;
    char str[] = "SHaddOW";
    char smallStr[SIZE] , bigStr[SIZE]; 
    for (i = 0; i <= strlen(str) ; i++)
    {
        if (str[i]>= 'A' && str[i]<='Z')
        {
            bigStr[countbig] = str[i];
            countbig++;
        }
        else if (str[i] >= 'a' && str[i] <= 'z')
        {
            smallStr[countsmall] = str[i];
            countsmall++;
        }
    }
    puts(smallStr);
    puts(bigStr);
    system("PAUSE");
    return 0;
}

当我运行该程序时,它显示:

enter image description here

4 个答案:

答案 0 :(得分:3)

puts( smallStr );

继续编写smallStr指向的任何内容,直到它命中空字节('\0')。

您永远不会在smallStrbigStr中写入空字节,因此您会看到正在观察的乱码输出。 (很高兴程序没有崩溃,因为它不应该访问内存。)

在循环结束时,终止字符串:

smallStr[ countsmall ] = '\0';
bigStr[ countbig ] = '\0';

这应该有所帮助。

答案 1 :(得分:1)

这是因为没有做空终止所以, 做

的初始化
 char smallStr[SIZE] = {0} , bigStr[SIZE] = {0}; 

在循环结束后完成循环后的空终止

smallStr[ countsmall ] = '\0';
bigStr[ countbig ] = '\0';

您将获得正确的结果。

答案 2 :(得分:1)

试试此代码

   #include <stdlib.h>
   #include <string.h>
   #define SIZE 10

    int main()
    {
         int i = 0;
         int countbig = 0 , countsmall = 0;
         char str[] = "SHaddOW";
         char smallStr[SIZE] , bigStr[SIZE]; 
         for (i = 0; i < strlen(str) ; i++)
         {
             if (str[i]>= 'A' && str[i]<='Z')
             {
               bigStr[countbig] = str[i];
               countbig++;
             }
             else if (str[i] >= 'a' && str[i] <= 'z')
             {
              smallStr[countsmall] = str[i];
              countsmall++;
             }
         }
         bigStr[countbig]='\0';
         smallStr[countsmall] = '\0';

         puts(smallStr);
         puts(bigStr);
         system("PAUSE");
         return 0;
  }

你应该添加\0来结束字符串,直到i小于字符串的长度。

答案 3 :(得分:0)

#include <stdlib.h>
#include <string.h>
#define SIZE 10

int main()
{
    int i = 0;
    int countbig = 0 , countsmall = 0;
    char str[] = "SHaddOW";
    char smallStr[SIZE] , bigStr[SIZE]; 
    for (i = 0; i <= strlen(str) ; i++)
    {
        if (str[i]>= 'A' && str[i]<='Z')
        {
            bigStr[countbig] = str[i];
            countbig++;
        }
        if (str[i] >= 'a' && str[i] <= 'z')
        {
            smallStr[countsmall] = str[i];
            countsmall++;
        }
    }
        bigStr[countbig] ='\0'; //you need to add null character at the end 
        smallStr[countsmall] = '\0';//you need to add null character at the end
    puts(smallStr);
    puts(bigStr);
    system("PAUSE");
    return 0;
}