c++ - 将原始指针移动到创建的函数中的下一个字符

标签 c++ pointers

我有一个作业,我必须使用指针删除单词开头的空格,修改原始单词并返回修改后的单词。 我唯一得到的是函数名称/参数必须如下所示:

char* trim(char *str)

并且在 main 函数中必须是这样的:(注释显示预期的输出)

char str[] = "   Hello cpp", *newstr;
cout << "start" << str << "end" << endl;    // start   Hello cppend
newstr = trim(str);
cout << "start" << str << "end" << endl;    // startHello cppend
cout << "start" << newstr << "end" << endl;    // startHello cppend

我创建的函数如下所示:

char* trim(char *str){
    while(*str<33){
        str++;
    }
    cout<<str<<endl;
    return str;
}

想法是,当当前指针的值为空格时(*str < 33) 我想将指针的地址移动到下一个字符。 我使用了“while”,所以它会移动到下一个位置,直到它指向一个不是空格的值。

返回时一切正常。 “newstr”不带空格返回,输出是“startHello cppend”,当我输出 str in the function 它显示没有空格的文本。 但原始值保持不变。 main 中的输出仍然是 start Hello cppend

为什么当我使用 str++ 在函数中移动指针时,原始指针没有改变,在 main 函数中它仍然带有空格,但函数中的 str 显示没有空格?

最佳答案

从您的第一段来看,您似乎实际上应该修改数组以删除空格,而不是简单地指向第一个非空格。

作为伪代码:

char * trim(char * str)
{
    var ptrFirstNonSpace=str, ptrCurr=str
    while ptrFirstNonSpace points to a space and not to end of string
        increment ptrFirstNonSpace
    while ptrFirstNonSpace does not point to end of string
        copy char from pFNS to ptrCurr
        increment both ptrCurr and pFNS
    set terminating char at ptrCurr
    return str
}

关于c++ - 将原始指针移动到创建的函数中的下一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55361145/

相关文章:

c++ - SIMD 指令缺少 OpenMP if 子句

c - 将 void* 指针转换为 char* 指针并对其进行指针算术运算是否有效?

c - 指向已初始化整数数组的指针

C - 访问参数 vector 创建指针和读取值

c++ - 字符串类操作

c++ - 点云三角剖分算法

C++:::ntohs() 在更高的优化级别上失败

c - 需要帮助解决 C 指针链表赋值问题

c++ - 为什么编译器不能区分 double** 和 double*

C++ - 二维数组作为方法参数