gpt4 book ai didi

c - 使用 C 中的指针在给定位置添加字符

转载 作者:太空宇宙 更新时间:2023-11-04 02:31:52 25 4
gpt4 key购买 nike

在使用 C 中的指针在特定位置设置字符时遇到问题。

代码准确地将字符放置在正确的位置,但该位置的当前字符没有被移动。

问题是在找到位置时跳过当前字母,但是在找到位置时在 IF block 中添加 *dest++ = *string 会导致程序停止。

示例:字符串是“bigmoney”。要添加的字母是“X”。位置是3。

输出应该是“bigXmoney”

使用下面的代码,当前输出是“bigXoney”

如有任何建议,我们将不胜感激。谢谢!

更新后的代码:

void addLetter(char string[STRING_LENGTH], char letterToAdd, int pos)
{
// store array in pointer
char *stringHolder = string;
char *dest = string;
int posCounter = 0;

// loop through string while not null
while (*stringHolder) {
// position found, add the character
if (posCounter == pos) {
*dest++ = letterToAdd;
} else {
*dest++ = *stringHolder;
}

// increment position counter
posCounter++;

// move the pointer position
stringHolder++;
}
//reset stringholder pointer;
*dest = '\0';
}

最佳答案

如果你不想使用标准的 C 字符串函数,那么函数可以像下面这样

char * addLetter( char s[], char c, size_t pos )
{
size_t i = 0;

while ( i < pos && s[i] ) ++i;

if ( i == pos )
{
do
{
char tmp = s[i];
s[i++] = c;
c = tmp;
} while ( c );

s[i] = c;
}

return s;
}

如果你只需要在函数内部使用指针,那么它看起来像

char * addLetter( char s[], char c, size_t pos )
{
char *p = s;

while ( *p && p != s + pos ) ++p;

if ( p == s + pos )
{
do
{
char tmp = *p;
*p++ = c;
c = tmp;
} while ( c );

*p = c;
}

return s;
}

这是一个演示程序

#include <iostream>

char * addLetter( char s[], char c, size_t pos )
{
char *p = s;

while ( *p && p != s + pos ) ++p;

if ( p == s + pos )
{
do
{
char tmp = *p;
*p++ = c;
c = tmp;
} while ( c );

*p = c;
}

return s;
}

int main()
{
const size_t STRING_LENGTH = 10;
char s[STRING_LENGTH] = "bigmoney";

std::cout << s << std::endl;
std::cout << addLetter( s, 'X', 3 ) << std::endl;


return 0;
}

它的输出是

bigmoney
bigXmoney

关于c - 使用 C 中的指针在给定位置添加字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42212625/

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