字符串
1.1如何统计一行字符中多少个单词
#include <stdio.h>
#include <stdlib.h>
#define BUFFERSIZE 1024
int main()
{
char string[BUFFERSIZE];
int i, count = 0, word = 0;
char c;
gets(string);
for (i = 0; (c = string[i])!= '\0'; i++) // 这里注意括号里面的优先级
{
if (c == ' ')
word = 0;
else if (word == 0)
{
word = 1;
count++;
}
}
printf("一共有单词%d个", count);
system("pause");
return 0;
}
1.2 如何将字符串逆序
一 零时变量法 :定义一个中间变量来交换两个值
#include <iostream>
using namespace std;
void reverse_str(char *ch)
{
char *p=ch;
int len=0;
//计算字符串长度
for(char *c=ch;*c!='\0';c++)
len++;
char *q=p+len-1;
char *tmp=new char; //申请动态变量
for(;q>p;p++,q--)
{
*tmp=*p;
*p=*q;
*q=*tmp;
}
delete tmp;
}
int main(void)
{
char str1[]="abcdefg";
cout<<"字符串"<<str1<<"翻转后:";
reverse_str(str1);
cout<<str1<<endl;
system ("pause");
return 0;
}
直接交换
#include <iostream>
#include <string.h>
using namespace std;
void reverse_str(char *ch)
{
char *p=ch;
char *q=p+strlen(ch)-1;
for(;q>p;p++,q--)
{
*p=*p^*q;
*q=*p^*q;
*p=*p^*q;
}
}
int main(void)
{
char str1[]="abcdefg";
cout<<"字符串"<<str1<<"翻转后:";
reverse_str(str1);
cout<<str1<<endl;
system ("pause");
return 0;
}
三 交换单词
#include <iostream>
#include <string.h>
using namespace std;
//实现字符串翻转
void reverse_str(char *ch,int front ,int end)
{
while(front<end)
{
ch[front]=ch[front]^ch[end];
ch[end] = ch[front] ^ ch[end];
ch[front]=ch[front] ^ ch[end];
front++;
end--;
}
}
//反转字符串中的单词
void swapWord(char *str)
{
//对整个字符串进行反转操作
int len=strlen(str);//修饰长度
reverse_str(str,0,len-1);
int begin=0;
//对每个单词操作
for(int i=1;i<len;i++)
{
if(str[i]==' ')
{
reverse_str(str,begin,i-1);
begin=i+1;
}
}
reverse_str(str,begin,len-1);
}
int main(void)
{
char str1[] = " how are you";
cout << "字符串" << str1 << "翻转后:";
swapWord(str1);
cout << str1 << endl;
system("pause");
return 0;
}
输出字符串的所有组合
#include <stdio.h>
#include <stdlib.h>
//交换两个指针所指的字符
void swap(char *p1,char *p2)
{
char tmp=*p1;
*p1=*p2;
*p2=tmp;
}
//对字符串进行全排列
// str为待排序的字符串,pStart为待排序的字符串
void Permutation(char *str,char *pStar)
{
char *p=pStar;
if(str==NULL||pStar==NULL)
return;
//完成全排列后输出当前排列的字符串
if(*pStar=='\0')
printf("%s",str);
else
{
for(;*p!='\0';p++);
{
//交换第一个字符pStart与当前遍历的字符p
swap(pStar,p);
//固定一个字符,对剩余的字符进行全排列
Permutation(str,pStar+1);
//还原pStart与P
swap(pStar,p);
}
}
}
int main(void)
{
char str[]="abc";
Permutation(str,str);
system("pause");
return 0;
}