簡體   English   中英

修改指針值

[英]Modifying pointer value

我分配給學校的工作有些麻煩。 有人告訴我寫一個修改字符的程序。 我可以做的很好。 我只是不知道如何使用指針。 我對此進行了研究,並找到了一些解決方案。 但是它們不能滿足任務的需要。 有人告訴我定義一個完全像這樣的函數:

int stripWhite(char *userInput)

所以我做了。 唯一的問題是,我相信這可以復制值。 並且不修改實際值。 所以這是從我的程序中挑選的一些代碼:

在main內部,我聲明了char,然后使用cin.getline收集我的輸入。 然后我叫stripwhite。 然后我喊出我的字符。 該值永不變。 作業說,需要完全按照上面的定義stripwhite。 我在這里不知所措。 有什么幫助嗎?

char userInput[100];
int spaces = 0;
cin.getline(userInput,99);
spaces = stripWhite(userInput);
cout << userInput;

stripWhite被定義為接收字符指針, 使原始數據的副本-它傳遞一個指向原始數據,所以修改*userInputstripWhite會修改原始字符串,其地址傳遞。

簡單的演示:

#include <iostream>

void modify(char *input) { 
    *input = 'a';
}

int main() { 
    char data[] = "ABCD";

    std::cout << data << "\n";
    modify(data);
    std::cout << data << "\n";
    return 0;
}

結果:

ABCD
aBCD

您的函數需要一個字符指針。 根據函數名稱和用法,此函數可能旨在將字符緩沖區作為輸入並刪除所有空格,同時返回刪除的空格數。

因此,基本上,您必須遍歷緩沖區,並且實質上在跳過空格的同時向下移動內容。 最簡單的方法是維護兩個指針,然后從一個指針復制到另一個指針。

這是我的處理方式(警告,未經測試)。 顯然,由於這是一項任務,因此您需要編寫自己的代碼,但是希望該示例可以消除您的任何誤解。

int stripWhite(char* userInput){

    auto inpos = userInput;
    auto outpos = userInput;
    int count = 0;

    while(*inpos){
        if(*inpos != ' '){
            *outpos = *inpos;
            ++outpos;
        } else {count++;}
        ++inpos;
    }

    *outpos = '\0';
    return count;
}

您可以使函數接收指向char的指針,並根據需要更改所有內容。

char stripWhite(char **ptr){
*ptr = "String";
}

char *string;
stripWhite( &string );
cout<< string <<endl;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM