第11 章字符串 和字符串 函数

2018-12-02  本文已影响0人  小风xf

使用 字符串 用户 交互 

#include <stdio.h>

#include < stdlib.h>

#define MSG "you must have many talents tell me some "

#define LIM 5

#define LINELEN 81

void main()

{

char name [LINELEN];

char talents [LINELEN];

int i  = 0;

const char m1[40] = "Limit yourself to one line's worth";

const char *m2 = " If your can't think of anything fake it ";

const char *m3 = "\n Enough about me - what's your name?";

const char *mytal[LIM] = {

"Adding numbers swiftly ",

"Multiplying accurately ",

"stashing data ",

"Following instructions to the letter ",

"Understanding the C language "

};

printf("Let me tell you some of them .\n");

puts ("what were they ? ah yes heres a partial list ");

for ( i ;  i  < LIM;  i ++)

{

puts(*(mytal+i));

}

puts("\n");

puts(m3);

gets(name);

printf("well %s ,%s \n",name,MSG);

printf("%s \n %s \n ",m1, m2);

gets(talents);

puts("Let's see if i 've got that list");

puts(talents);

printf("think %s",name);

system("pause");

}

把字符串 看作 指针 

#include <stdio.h>

#include < stdlib.h>

#define MSG "you must have many talents tell me some "

#define LIM 5

#define LINELEN 81

void main()

printf("%s , %p %c","we","are",*"space farers");

system("pause");

}

指针 和字符串 

#include <stdio.h>

#include < stdlib.h>

#define MSG "you must have many talents tell me some "

#define LIM 5

#define LINELEN 81

void main()

char * mesg = "don't be a fool11!";

char * copy;

copy = mesg;

printf("%s \n ",&copy[0]);

printf("mesg = %s  & mesg = %p  value = %p \n ",mesg, &mesg,&mesg[0]);

printf("copy = %s  & mesg = %p  value = %p \n ",copy, &copy,copy);

system("pause");

}

读取一个名字

#include <stdio.h>

#include < stdlib.h>

#define MSG "you must have many talents tell me some "

#define LIM 5

#define LINELEN 81

void main()

char name[LINELEN] ;

gets(name);

printf("%s",&name[0]);

system("pause");

}

读取一个名字 

#include <stdio.h>

#include < stdlib.h>

#define MSG "you must have many talents tell me some "

#define LIM 5

#define LINELEN 81

void main()

char name[LINELEN] ;

char *p;

p = gets(name);

printf("%s      , %s",&name[0] ,& p[0]);

system("pause");

}

使用fgets 读取一个名字 

#include <stdio.h>

#include < stdlib.h>

#define MSG "you must have many talents tell me some "

#define LIM 5

#define LINELEN 81

void main()

char name[LINELEN] ;

char *p;

p = fgets(name,LINELEN,stdin);

printf("%s      , %s",&name[0] ,& p[0]);

system("pause");

}

使用 

使用scanf 

#include <stdio.h>

#include < stdlib.h>

#define MSG "you must have many talents tell me some "

#define NAME 5

#define LINELEN 11

void main()

char name[NAME] , name2[LINELEN];

int a ;

a = scanf("%5s %10s",name,name2);

printf("%s,%s",&name[0] ,& name2[0]);

system("pause");

}

使用 puts()

#include <stdio.h>

#include < stdlib.h>

#define MSG "you must have many talents tell me some "

#define NAME 5

#define LINELEN 11

void main()

char str1[80] = "An array was initialized to me ";

const char * str2 = "a, pointer was initialized to me";

puts("I' m an argument to puts");

puts(MSG);

puts( &*(str1+0));

puts(  str1 );

puts(str2);

puts( &str1[5]);

puts(&(*(str1 +5)));

puts( str2+4);

puts( &str2[4]);

system("pause");

}

用户自定义的输出函数 

#include <stdio.h>

#include < stdlib.h>

#define MSG "you must have many talents tell me some "

#define NAME 5

#define LINELEN 11

void put1(const char *);

int put2 ( const char *);

void main()

put1("if I'd as much money");

put1("as I could spend \n");

printf("Icount %d characters.\n" , put2("I never would cry olld chairs to mend "));

system("pause");

}

void put1(const char * string )

{

while (*string )

{

putchar(*string++);

}

}

int put2 ( const char * string)

{

int count = 0;

while (*string )

{

putchar(*string++);

count++;

}

return count;

}

代码错误.

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

void put2 ( char * , unsigned int);

void main()

char *mesg =" Hold on to your hats , hackers";

puts(mesg);

put2(&*(mesg+0),7);

puts(mesg);

system("pause");

}

void put2 (  char * string , unsigned int size)

{

if (strlen(string) > size )

{

string[size] = '\0';

}

}

解决错误,所短字符串的函数 

指针是一个常量,, 数组是一个变量

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

void put2 ( char * , unsigned int);

void main()

char mesg[] =" Hold on to your hats , hackers";

puts(mesg);

put2(&*(mesg+0),7);

puts(mesg);

puts(mesg+8);

system("pause");

}

void put2 (  char * string , unsigned int size)

{

if (strlen(string) > size )

{

string[size] = '\0';

}

}

连接两个字符串 

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

#define SIZE 80

void main()

char flower [SIZE];

char addon[] = "s smell like old shoes ";

gets(flower);

strcat(flower,addon);

puts(flower);

puts(addon);

system("pause");

连接两个字符串 并且 ,检查第一个字符串的大小

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

#define SIZE 30

#define BUGSIZE 13

void main()

char flower [SIZE];

char addon[] = "s smell like old shoes ";

char bug[BUGSIZE];

int available;

puts("what is your favorite flower ? ");

gets(flower);

if ((strlen(addon) + strlen(flower)+1) <= SIZE)

{

strcat(flower, addon);

}

puts ("what is your favorite bug?");

gets(bug);

available = BUGSIZE - strlen(bug)-1;

strncat(bug,addon,available);

puts(bug);

system("pause");

STRCMP 满足要求的程序

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

#define MAX 40

#define ANSWER "grant"

void main()

char try1[MAX];

puts("who is buried in grant's tomb?");

gets(try1);

while(strcmp(try1,ANSWER)  )

{

puts("No that's wrong try again ");

gets(try1);

}

puts("that 's right");

system("pause");

strcmp 返回值

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

#define MAX 40

#define ANSWER "grant"

void main()

printf("strcmp (\" A \" , \" A \" )is ");

printf("%d",strcmp ("A","A"));

printf("strcmp (\" A \" , \"b \" )is \n");

printf("%d",strcmp ("A","b"));

printf("%d",strcmp ("hello","hel"));

system("pause");

使用strncmp()函数

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

#define LISTSIZE 5

#define MAX 40

void main()

char * list[ LISTSIZE] = {

"astronomy",

"astounding",

"astrophysics ",

"ostracize",

"asterism"

};

int count = 0;

int i ;

for (  i = 0; i < LISTSIZE; i++)

{

if (strncmp(list[i],"astro",5) == 0)

{

printf("Found : %s\n",list[i]);

count++;

}

}

printf("the list contained %d words beginning with astro ",count);

system("pause");

strcpy()函数的使用

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

#define WORDS "beast"

#define SIZE 40

#define LIM 5

void main()

char qword [LIM][SIZE];

char temp[SIZE];

int i = 0;

printf("enter %d words beginning with q \n",LIM);

while (i < LIM && gets(temp))

{

if (temp[0] != 'q')

{

printf("%s doesn't begin with q !",temp);

}else

{

strcpy(qword[i],temp);

i++;

}

}

puts("here are the words accepted : ");

for (  i = 0; i < LIM; i++)

{

puts(qword[i]);

}

system("pause");

strncpy()

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

//#define WORDS "beast"

#define SIZE 40

#define LIM 5

#define TARGSIZE 7

void main()

char qword [LIM][SIZE];

char temp[SIZE];

int i = 0;

printf("enter %d words beginning with q \n",LIM);

while (i < LIM && gets(temp))

{

if (temp[0] != 'q')

{

printf("%s doesn't begin with q !",temp);

}else

{

strncpy(qword[i],temp ,TARGSIZE -1 );

qword[i][TARGSIZE - 1] = '\0';

i++;

}

}

puts("here are the words accepted : ");

for (  i = 0; i < LIM; i++)

{

puts(qword[i]);

}

system("pause");

strcpy高级属性 

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

#define WORDS "beast"

#define SIZE 40

//#define LIM 5

void main()

char *orig = WORDS;

char copy[SIZE] = "Be the best that you can be ";

char *ps;

puts(orig);

  puts(copy);

ps = strcpy(copy +7 ,orig);

puts(copy);

puts(ps);

system("pause");

格式化一个字符串 

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

#define WORDS "beast"

#define MAX 20

//#define LIM 5

void main()

{   

char first[MAX] ;

char list [MAX];

char formal[2 * MAX+10];

double prize;

puts("enter your first name");

gets(first);

gets(list);

puts("enter your prize noney");

scanf("%lf",&prize);

sprintf(formal,"%s , %-19s $%6.2f\n" ,list ,first,prize);

puts( formal);

system("pause");

读进一些 字符串并 进行排序 

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

#define SIZE 81

#define LIM 20

#define HALT " "

void  stsrt (char *string[],int );

void main()

{   

char input [LIM][SIZE] ;

char *ptstr[LIM];

int ct = 0;

int k;

printf("Input up to %d lines and Iwill sort them \n",LIM);

printf("to stop press the enter key at a limne start \n");

while (ct < LIM && gets (*(input +ct) ) != NULL && *(*(input+ct)+0) != '0')

{

ptstr[ct] = input[ct];

ct++;

}

stsrt(ptstr,ct);

puts("\n here's the sorted list \n");

for (  k = 0; k < ct; k++)

{

puts(*(ptstr+k));

}

system("pause");

void  stsrt (char *string[],int num)

{

char *temp;

int top, seek;

for (top = 0; top< num-1; top++)

{

for (  seek = top; seek < num ; seek++)

{

if (strcmp (*(string + top), string [seek]) > 0)

{

temp = string [top];

string [top] = string[seek];

string[seek] = temp;

}

}

}

}

修改字符串, 大小写转换 

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

#include <ctype.h>

#define LIMIT 81

void  ToUpper (char *  );

int PunctCount (const char*);

void main()

{   

char line [LIMIT];

puts("Please enter a line");

gets(line);

ToUpper(line);

puts(line);

printf("that line has %d punctuation charachters \n",PunctCount(line));

system("pause");

}

void  ToUpper (char * str )

{

while (*str  )

{

*str = toupper (*str);

str++;

}

}

int PunctCount (const char* str)

{

int ct = 0;

while (*str  )

{

if (ispunct (*str))

{

ct++;

}

str++;

}

return ct;

}

带有参数的 main函数 

#include <stdio.h>

#include <string.h>

#include < stdlib.h>

#include <ctype.h>

#define LIMIT 81

void main(int argc ,char *argv[])

{   

int count ;

printf("the command line has %d arguments \n",argc -1);

for (  count = 1; count < argc; count++)

{

printf("%d %s \n ",count, argv[count]);

}

system("pause");

  }

#include <stdio.h>

#include < stdlib.h>

void main()

{

char number[30];

char *end;

long value;

puts("Enter a number (empty line to quit )");

while(gets ( number) && number [0] != '\0')

{

value = strtol (number , & end , 10);

printf("value %d , stopped at %s (%d)\n",value,end,*end) ;

value = strtol (number , & end , 16 );

printf("value : %ld, stopped at %s(%d)\n",value,end,*end);

puts("next number ");

}

puts ("bey!\n");

system("pause");

}

上一篇下一篇

猜你喜欢

热点阅读