我正在创建此程序,作为大学作业的一部分。目的是在删除辅音并大写所有字母的同时将char* slogan = "Comp10120 is my favourite module";复制到新字符串。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

void printStrings();

char *slogan = "Comp10120 is my favourite module";
char *p = slogan;
char *slogan_copy = NULL;

int main ()
{
    //Get size of original string
    int slogan_size = 0;
    while (*p++ != '\0')
        slogan_size++;

    // Dynamically allocate memory to copy of string
    slogan_copy = (char*) malloc ((slogan_size+1) * sizeof(char));
    //Place string terminator at end of copy string
    slogan_copy[slogan_size] = '\0';

    //Reset p pointer to start of string
    p = slogan;
    int offset = 0;

    while (*p != '\0')
    {
        //If the current element in the string is a consonant,
        //or as defined in the if statement,
        //if p is not a vowel and is between a and z or A and Z:
        if ((!(*p == 'a' || *p == 'e' || *p == 'i' || *p == 'o' || *p == 'u'))
            && (((*p > 'a') && (*p < 'z')) || ((*p > 'A') && (*p < 'Z'))))
            p++;
        else
            //Copy element to slogan_copy and capitalise
            slogan_copy[offset++] = *p++;
            slogan_copy[offset] = toupper(slogan_copy[offset]);
    }

    //Place string terminator after last element copied.
    slogan_copy[offset] = '\0';

    printStrings();

    return 0;
}

void printStrings ()
{
    printf("Origianl String: %s\n",*slogan);
    printf("Modified String: %s",*slogan_copy);
}

当我尝试执行时,出现错误
initializer element is not constant
 char *p = slogan;
           ^~~~~~

我以为是因为我试图对slogan进行操作,就好像它只是规则的字符数组,而不是指向字符串的指针一样。但是,我不知道如何解决此错误。

除此之外,出于好奇,我尝试将char*slogan = "Comp10120 is my favourite module";更改为char slogan[] = "Comp10120 is my favourite module";以查看其是否有效。它符合要求,但在执行时崩溃。关于如何修改代码使其正常工作的任何想法?

最佳答案

您的程序中有很多错误。请考虑使用全局变量,并在需要的地方考虑使用const,但这是一个很好的起点,因此我已经测试了您的程序,它似乎可以进行4个简单的更正:

1.在全局环境中删除p初始化

8: //char *p = slogan;
9: char *p;
  • p块中设置main
    int main()
    {
    p =口号;
    ...
  • slogan语句中的printf中删除该astrix,它已经是一个指向char数组的指针

    printf(“原始字符串:%s \ n”,标语);
    printf(“Modified String:%s”,slogan_copy);

  • 希望这可以帮助

    09-29 20:41