[英]How do I remove all occurrences of a letter in c, only using pointer and pointer arithmetic.
我需要编辑此代码的帮助,以删除单个字符数组中任何出现的特定字母(由用户定义)的情况。 到目前为止,这是我的代码。
void removeLetter(char string[STRING_LENGTH], char letterToBeRemoved)
{
char *p1 = string;
size_t length = strlen(string);
for (int i = 0; i < length-1; i++)
{
if (*p1 = letterToBeRemoved)
{
for (int j = 0; j < length; j++)
{
*p1 = *(p1 + 1);
}
}
++p1;
}
}
不知道是什么问题? 这与Java不同吗?从某种意义上说,您找到字母然后将所有字母向下移动一个。 我是c语言的新手,这对我来说很难。 谢谢
更快的解决方案使一遍复制您需要的数组中的backword,实际上覆盖了要删除的字母。
#include <iostream>
using namespace std;
const size_t STRING_LENGTH = 12;
void removeLetter(char* string, char letterToBeRemoved)
{
// pBack will look at each letter in the array
// and copy only valid letters to pFront
// pFront is incremented only when valid letters are copied to it.
char* pBack = string;
char* pFront = string;
while ((pBack - string) < STRING_LENGTH)
{
if (*pBack != letterToBeRemoved)
{
*pFront = *pBack;
pFront++;
}
pBack++;
}
// Terminate string if we removed something
if ((pBack - string) != (STRING_LENGTH - 1))
{
*pFront = '\0';
}
}
int main() {
char input[STRING_LENGTH] = "hello world";
removeLetter(input, 'l');
std::cout << input << std::endl;
return 0;
}
在这里查看: http : //ideone.com/t3Obxw
您想要平等,而不是分配:
if (*p1 == letterToBeRemoved)
// ^
您不需要O(n ^ 2)算法(例如您已经使用内部循环实现)即可。 取而代之的是遍历数组,每次找到要删除的字母时,请增加步长以复制字符。
相反,当源不是特殊char
时,遍历数组并更新目标。
void removeLetter(char *string, char letterToBeRemoved) {
// attempting to remove the null character is pathological.
assert(letterToBeRemoved);
char *dest = string;
do {
while (*string == letterToBeRemoved) string++;
*dest = *string++;
} while (*dest++);
}
#include <stdio.h>
#define STRING_LENGTH 100
void removeLetter(char mystring[STRING_LENGTH], char letterToBeRemoved) {
char *p1, *p2;
p1 = p2 = mystring;
while(*p1 != '\0') {
if(*p1 != letterToBeRemoved)
*p2++ = *p1;
p1++;
}
*p2 = *p1;
}
int main() {
char s[100] = "hi how are you henna.";
char *p = s;
while(*p != '\0')
printf("%c", *p++);
printf("\n");
removeLetter(s, 'h');
p = s;
while(*p != '\0')
printf("%c", *p++);
printf("\n");
return 0;
}
我使用了两个指针,其中一个指针是简单指针“ p1”,并迭代字符串中的所有字母。 第二个指针“ p2”仅复制不等于“ letterToBeRemoved”的字母。 注意:“ p2”指针始终与“ p1”具有相同的速度或较慢的速度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.