ผลต่างระหว่างรุ่นของ "Psl/ตัวอย่างการเขียนพอยน์เตอร์กับสตริง"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 30: แถว 30:
  
 
== การคัดลอกสตริง ==
 
== การคัดลอกสตริง ==
ในภาษาซี เรามีฟังก์ชัน <tt>strcpy</tt> สำหรับหาความยาวของสตริง ในตัวอย่างนี้ เราทดลองเขียนฟังก์ชันดังกล่าวโดยใช้พอยน์เตอร์  สังเกตว่าฟังก์ชัน <tt>mystrcpy</tt> นั้นคืนค่า pointer ของสตริงปลายทางมาด้วย  เราเขียนกรณีดังกล่าวเผื่อไว้สำหรับการใช้งานที่สะดวกขึ้น เช่น เราอาจจะสั่ง <tt>printf("%s\n", mystrcpy(dst,src));</tt> ได้เลย
+
ในภาษาซี เรามีฟังก์ชัน <tt>strcpy</tt> สำหรับหาความยาวของสตริง ในตัวอย่างนี้ เราทดลองเขียนฟังก์ชันดังกล่าวโดยใช้พอยน์เตอร์   
 +
 
 +
สังเกตว่า
 +
 
 +
* เราต้องสั่ง <tt>*dp = '\0';</tt> ในตอนท้ายด้วย เพื่อปิดสตริง
 +
* ฟังก์ชัน <tt>mystrcpy</tt> นั้นคืนค่า pointer ของสตริงปลายทางมาด้วย  เราเขียนกรณีดังกล่าวเผื่อไว้สำหรับการใช้งานที่สะดวกขึ้น เช่น เราอาจจะสั่ง <tt>printf("%s\n", mystrcpy(dst,src));</tt> ได้เลย
  
 
<syntaxhighlight lang="cpp">
 
<syntaxhighlight lang="cpp">
แถว 37: แถว 42:
 
char* mystrcpy(char* dest, char* src)
 
char* mystrcpy(char* dest, char* src)
 
{
 
{
  int l = 0;
 
 
   char* sp = src;
 
   char* sp = src;
 
   char* dp = dest;
 
   char* dp = dest;

รุ่นแก้ไขเมื่อ 21:27, 17 มกราคม 2558

หน้านี้รวมตัวอย่างการเขียนพอยน์เตอร์กับสตริง

สตริงในภาษาซีเก็บเป็นอาร์เรย์ของ char โดยมีอักขระหมายเลข 0 เป็นตัวปิดท้าย (null-terminated string) ในหลาย ๆ กรณีเราสามารถจัดการสตริงได้สะดวกด้วยพอยน์เตอร์

การหาความยาว

ในภาษาซี เรามีฟังก์ชัน strlen สำหรับหาความยาวของสตริง ในตัวอย่างนี้ เราทดลองเขียนฟังก์ชันดังกล่าวโดยใช้พอยน์เตอร์

#include <cstdio>

int mystrlen(char* st)
{
  int l = 0;
  char* p = st;
  while(*p != '\0') {
    p++;
    l++;
  }
  return l;
}

char buffer[1000];

main()
{
  scanf("%s", buffer);
  printf("%d\n", mystrlen(buffer));
}

การคัดลอกสตริง

ในภาษาซี เรามีฟังก์ชัน strcpy สำหรับหาความยาวของสตริง ในตัวอย่างนี้ เราทดลองเขียนฟังก์ชันดังกล่าวโดยใช้พอยน์เตอร์

สังเกตว่า

  • เราต้องสั่ง *dp = '\0'; ในตอนท้ายด้วย เพื่อปิดสตริง
  • ฟังก์ชัน mystrcpy นั้นคืนค่า pointer ของสตริงปลายทางมาด้วย เราเขียนกรณีดังกล่าวเผื่อไว้สำหรับการใช้งานที่สะดวกขึ้น เช่น เราอาจจะสั่ง printf("%s\n", mystrcpy(dst,src)); ได้เลย
#include <cstdio>

char* mystrcpy(char* dest, char* src)
{
  char* sp = src;
  char* dp = dest;
  
  while(*sp != '\0') {
    *dp = *sp;
    sp++;
    dp++;
  }
  *dp = '\0';
  return dest;
}

char buffer[1000];
char outbuffer[1000];

main()
{
  scanf("%s", buffer);
  mystrcpy(outbuffer, buffer);
  printf("%s\n", outbuffer);
}