我正在创建此程序,作为大学作业的一部分。目的是在删除辅音并大写所有字母的同时将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);
希望这可以帮助