gpt4 book ai didi

c - 使用指针修改字符串

转载 作者:行者123 更新时间:2023-11-30 17:54:44 24 4
gpt4 key购买 nike

所以我有一个函数,它接受一个指向“字符串”数组的指针(我将字符串理解为后面跟着“\0”的内存块)。由于字符串已经是指向字符串第一个字节的指针,所以我的指针实际上是一个** doublePointer。然而,我在 Ying Yang 上出现了段错误,老实说,我不知道低级别 View 中发生了什么。下面是我的代码,它的功能是读取字符并将第一个单词(字符串中)的第一个字母和句点后的第一个字母大写。

    void autocaps(char ** words)
{

/* Add code here */
//Period Boolean
bool next=false;
//First Word Boolean
bool fcap=true;
//Counter Variable
int i=0;
int j=0;
//Second Pointer
char** wordx = words;

//LowerCase Bomb & Period Flagging
while(wordx[i][j]!='\0'){
while(wordx[i][j]!='\0'){
//A-Z Filter
if((wordx[i][j]>='A')&&(wordx[i][j]<='Z')){
wordx[i][j]+=32;
}
if(wordx[i][j]=='.'){
next=true;
}
j++;
}
i++;
}

i=0;
j=0;
//Cap First Word & Cap Post Period
while(words[i]!='\0'){
while(words[i][j]!='\0'){
//a-z Filter
if((words[i][j]>=97)&&(words[i][j]<=122)){
if(fcap){
words[i][j]-=32;
fcap=false;
}
if(next){
words[i][j]-=32;
}
}
j++;
}
i++;
}
return;

}

当我打印通过参数传递的原始指针时,出现段错误。如果有人可以向我解释这个低级概念,因为我很困惑,我到处乱扔三颗星和四颗星,我什至不知道它是否让我更接近或远离调试我的代码。

谢谢!!

最佳答案

您说的是“字符串数组”,但根据您的代码和您的意图(大写第一个字符和句点后),我将假设您希望这适用于您传递给函数的单个字符串。

字符串只是一个字符数组,后跟一个 0 值。你要做的就是遍历字符数组。要从字符指针获取字符,您需要取消引用该指针。这就是为什么在我们实际检查字符串中的字符的任何地方您都会看到“*words”。

双指针、三重指针和四重指针会让你离解决方案更远。

这是一个重新设计的示例:

void autocaps(char* words)
{
bool fcap=true; /* true so first letter is made cap */

while (*words != '\0')
{
if (fcap)
{
/* capitalize */
if ((*words >= 'a') && (*words <= 'z'))
{
*words -= 32;
}

fcap = false;
}
else
{
/* not cap */
if ((*words >= 'A') && (*words <= 'Z'))
{
*words += 32;
}
}

/* period - cap next letter */
if (*words == '.')
{
fcap = true;
}

/* step to next character in array */
words++;
}

return;
}

关于c - 使用指针修改字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14766462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com