Ho una stringa C che assomiglia a "Nmy stringP"
, dove N e P possono essere qualsiasi carattere. Come posso modificarlo in "my string"
in C?Striscia primo e ultimo carattere dalla stringa C
risposta
"togliere" il punto di carattere 1 ° al secondo personaggio:
char mystr[] = "Nmy stringP";
char *p = mystr;
p++; /* 'N' is not in `p` */
Per rimuovere l'ultimo carattere sostituirlo con un '\ 0'
p[strlen(p)-1] = 0; /* 'P' is not in `p` (and it isn't in `mystr` either) */
Questo potrebbe non funzionare perché inizializzando "Nmy stringP" come letterale, il compilatore/linker può inserirlo nella memoria di sola lettura, causando il fallimento della modifica. – Suppressingfire
@Suppressingfire: "Nmy stringP" è in effetti una stringa letterale, ma viene copiata (char by char) nell'array 'mystr'. L'array 'mystr' è modificabile. – pmg
@ pmg: dove stai copiando? 'char * p = mystr' punta' p' a 'mystr', non copia' mystr'. – quark
Il modo più efficace:
//Note destroys the original string by removing it's last char
// Do not pass in a string literal.
char * getAllButFirstAndLast(char *input)
{
int len = strlen(input);
if(len > 0)
input++;//Go past the first char
if(len > 1)
input[len - 2] = '\0';//Replace the last char with a null termination
return input;
}
//...
//Call it like so
char str[512];
strcpy(str, "hello world");
char *pMod = getAllButFirstAndLast(str);
Il modo più sicuro:
void getAllButFirstAndLast(const char *input, char *output)
{
int len = strlen(input);
if(len > 0)
strcpy(output, ++input);
if(len > 1)
output[len - 2] = '\0';
}
//...
//Call it like so
char mod[512];
getAllButFirstAndLast("hello world", mod);
Il secondo modo è meno efficiente ma è più sicuro perché è possibile passare in letterali stringa in input. Puoi anche usare strdup per il secondo modo se non vuoi implementarlo tu stesso.
Il problema che vedo con la tua seconda implementazione è che devi assicurarti che il tuo output sia abbastanza grande per gestire la copia prima di chiamare getAllBufFirstAndLast(). In questo caso, consiglierei di aggiungere una variabile outputLength alla chiamata e lasciare che la funzione chiamata manipoli l'output con le funzioni strn *. – shank
sì, questa è una precondizione, sì, è possibile aggiungere un parametro di lunghezza. –
Un'altra opzione, ancora una volta partendo dal presupposto che "modifica" significa che si desidera modificare in atto:
void topntail(char *str) {
size_t len = strlen(str);
assert(len >= 2); // or whatever you want to do with short strings
memmove(str, str+1, len-2);
str[len-2] = 0;
}
Questa modifica la stringa in posizione, senza generare un nuovo indirizzo di soluzione pmg fa. Non che ci sia qualcosa di sbagliato nella risposta di pmg, ma in alcuni casi non è quello che vuoi.
A seguito di @ PMG risposta, si noti che si possono fare entrambe le operazioni in una dichiarazione:
char mystr[] = "Nmy stringP";
char *p = mystr;
p++[strlen(p)-1] = 0;
Questo probabilmente funzionerà come previsto, ma il comportamento non è definito nello standard C.
È meglio non fare affidamento su comportamenti indefiniti. – T0xicCode
@ xav0989 D'accordo, intendevo aggiungere altro come commento (per evidenziare la ragione per non farlo), non come risposta alternativa. Sono un po 'nuovo in questo. –
- 1. Python Rimuovere ultimo carattere dalla stringa e restituirlo
- 2. controllo ultimo carattere della stringa nel c
- 3. Rimuovere primo carattere dalla stringa se 0
- 4. Sostituzione ultimo carattere in una stringa
- 5. Striscia di caratteri nascosti dalla stringa
- 6. Rimuovere primo e l'ultimo carattere da stringa
- 7. Obiettivo C - Rimuovere l'ultimo carattere dalla stringa
- 8. Sostituire primo carattere della stringa
- 9. Stringa MySQL Ultimo indice
- 10. modo più semplice per striscia carattere di nuova riga dalla stringa di input in cartone
- 11. cosa significano contratto-primo e contratto-ultimo?
- 12. Primo e ultimo giorno del mese corrente
- 13. E 'possibile ottenere solo il primo carattere di una stringa?
- 14. C#: come ottenere il primo carattere di una stringa?
- 15. Rimuovi nesimo carattere dalla stringa
- 16. Ottenere primo carattere della stringa UTF-8
- 17. Rimuovere il primo carattere di una stringa
- 18. Come prendere un primo carattere della stringa
- 19. Ottenere e rimuovere il primo carattere di una stringa
- 20. Come rimuovere il primo e l'ultimo carattere di una stringa?
- 21. Perché string.TrimEnd non rimuovere solo ultimo carattere nella stringa
- 22. Python: Come ordinare l'elenco per ultimo carattere di stringa
- 23. R estrarre il primo numero dalla stringa
- 24. Regex da rimuovere ultimo/se esiste come ultimo carattere nella stringa
- 25. Rubino striscia stringa caratteri definiti
- 26. Come rimuovere il carattere NULL dalla stringa
- 27. bash - espressione dopo ultimo carattere specifico
- 28. Rimuovere carattere dalla stringa utilizzando JavaScript
- 29. conversione di stringa, primo carattere superiore di ogni parola
- 30. gruppo per primo carattere
Compiti? Aggiungi il tag "compiti" se lo è. – pmg
No, non fare i compiti, solo cercando di imparare C per divertimento. – igul222
Nella pura C non esiste una "stringa". Avete un puntatore a un buffer ('char *') o un array di caratteri ('char []')? –